Индексы в датафрейме
Я тренируюсь в машинном обучении и прохожу следующее соревнование на Kaggle'e https://www.kaggle.com/c/house-prices-advanced-regression-techniques/overview. На данный момент у меня есть датафрейм с предсказанными моделью ответами (y_pred) ( На сколько я правильно понимаю, я должен конкатенировать его с датафреймом из sample_submission.csv.)
- Подскажите как я могу это сделать (kaggle ругается на индексы в поле Id, насколько я понимаю, потому что индексы 1-1459 идут дважды вместо 1-2918?)
y_pred=pd.DataFrame({'SalePrice': y_pred})
pd_ans = pd.read_csv('sample_submission.csv')
new_df = pd.concat([y_pred,pd_ans['SalePrice']],axis=0)
indx = np.arange(1,2919)
pd_indx = pd.DataFrame({'Id':indx})
new_df = pd.concat([pd_indx,new_df],axis=1)
new_df.set_index('Id')
- Также я пробовал сделать немного другим способом, но тут возникает проблема как назвать первый столбец 'Id', а проблема с дублированием индексов, как я понимаю, остается
df_test_y = pd.read_csv('sample_submission.csv')
df_test_y = df_test_y['SalePrice']
y_pred=pd.DataFrame({'SalePrice': y_pred})
pd.concat([y_pred['SalePrice'],df_test_y])
- Могу ли я быстро подвинуть значения в 'Id' на единицу? 1,2,3... вместо 0,1,2,3...
Ответы (2 шт):
По вопросу 1. Вы предлагаете нам зарегистрироваться на kaggle, скачать ваши данные и посмотреть, как там организованы индексы? Но вообще-то конкатенация объединяет данные, а индексы оставляет такими, как они были в исходных датафреймах. Впрочем, указав параметр ignore_index=True вы можете при конкатенации построить единый новый индекс получаемого DataFrame. А при использовании параметра axis=1 как раз и идет объединение по одинаковым индексам. Так что в чем собственно состоит ваш вопрос - непонятно.
По вопросу 2. Вообще не ясно, в чем вопрос. Если про то, как назвать индекс - то оставьте это на усмотрение системы, зачем вам его переименовывать?
По вопросу 3. Да, изменить индекс (сдвинуть на единицу - в том числе) можно. Например вот так: df.index = df.index + 1
Не нужно ничего конкатенировать. Можно сделать, например, так:
df_pred = pd.read_csv('sample_submission.csv')
df_pred['SalePrice'] = y_pred
То есть взять sample_submission и заполнить в нём столбец SalePrice вашими предсказаниями. Главное, чтобы порядок следования данных у вас не менялся в тех данных по которым вы делали предсказания, в процессе их преобразования. Тогда индексы в sample_submission должны соответствовать вашим предсказаниям.
Либо другой вариант, но получиться должно тоже самое:
df_pred = pd.DataFrame({'Id': df_test['Id'], 'SalePrice': y_pred})
Здесь df_test - загруженный файл test.csv, для которого вы делали предсказания.