Pandas concat не объединяет, но добавляет - PullRequest
0 голосов
/ 27 января 2020

Я надеюсь на некоторую помощь. Я пытаюсь объединить три кадра данных в pandas с мультииндексом. Два из них работают нормально, но третий продолжает добавляться, а не объединяться. Все они имеют одинаковый мультииндекс (я проверял это по df1.index.name == df2.index.name)

Это то, что я пробовал:

df_final = pd.concat([df1, df2], axis = 1)

пример:

df1
A   B    X
0   1    3
    2    4

df2
A   B    Y
0   1    20
    2    30

Что я хочу получить, это:

df_final
A   B    X    Y
0   1    3    20
    2    4    30

Но что я продолжаю получать, это:

df_final
A   B    X    Y
0   1    3    NaN
    2    4    NaN
0   1    NaN  20
    2    NaN  30

Есть идеи? Я также пытался

df_final = pd.concat([df1, df2], axis = 1, keys = ['A', 'B'])

Но тогда df2 вообще не появляется.

Спасибо!

Ответы [ 3 ]

1 голос
/ 27 января 2020

Первый способ (и лучший в данном случае):

используйте слияние:

pd.merge(left=df1, right=df2, on=['A','B'], how='inner')

Второй способ :

Если вы предпочитаете использовать concat, вы можете использовать groupby после него:

df_final = pd.concat([df1, df2])
df_final = df_final.groupby(['A','B']).first()
0 голосов
/ 27 января 2020

Попробуйте выполнить

pd.merge(df1, df2)

. Join () также может быть использован для вашей проблемы, при условии, что вы добавите столбец «ключ» ко всем вашим фреймам данных.

0 голосов
/ 27 января 2020

Спасибо всем за помощь! С вашими предложениями я попытался объединиться, но я получил новую ошибку:

ValueError: Вы пытаетесь объединить столбцы int64 и object. Если вы хотите sh продолжить, вы должны использовать pd.concat

, что привело меня к выводу, что один из индексов в кадре данных, который добавлялся, был объектом, а не целым числом. Так что я изменил это, и теперь конкат работает!

Мне потребовались дни, чтобы пройти ... Так что еще раз спасибо!

...