Несоответствие индексов во время слияния в пандахPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Несоответствие индексов во время слияния в пандах

Сообщение Anonymous »

Я пытаюсь объединить два кадра данных в Python, pandas, df1 и df2.
Я пытаюсь объединить их в столбце 1, а затем присвоить значение столбца 2 из df2 в df1.
Это мой код:

Код: Выделить всё

df1 = df1.reset_index()

merged = df1.merge(df2, on='Column1', how='left', indicator=True, suffixes=('_df1', '_df2'))

mask = (
(df1['Column1'].notna()) &
(merged['_merge'] == 'both')
)

df1.loc[mask, 'Column2'] = merged.loc[mask, 'Column2_df2']
Однако индексы путаются. И когда я печатаю объединенными значениями, они совпадают правильно. Но когда я печатаю df1 после присвоения значений, я вижу, что значения в столбце 2 назначены неправильно, и я вижу, что индексы не соответствуют индексам, напечатанным в объединенной таблице.
I пробовал добавить reset_index при использовании .loc, вообще не сбрасывая индексы, но результат тот же.
Вот пример моих фреймов данных:
(я включу индексы которые не имеют отношения к этому примеру ввода, поскольку я работаю с большими фреймами данных с миллионами записей, я не могу придумать другого способа выразить это)

Код: Выделить всё

#input
df1 = pd.DataFrame({'Column1': ['A', 'B', None, 'D'],
'Column2': [None, None, None, None]
})
df2 = pd.DataFrame({'Column1': ['B', 'C', 'E', 'A'],
'Column2': [10, 20, 30, 40]
})

# output of merged:
Column1_df1  Column1_df2  Column2_df1  Column2_df2  _merge
44           A            A         None           40    both
57           B            B         None           10    both

# output of df1 after .loc:
Column1  Column2
0       A        30
1       B        10
3    None      None
6       D      None

# expected output of df1 after .loc:
Column1  Column2
44       A       30
57       B       40
3     None     None
6        D     None
Заранее благодарим за помощь!

Подробнее здесь: https://stackoverflow.com/questions/792 ... -in-pandas
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»