Как применить функцию merge чтобы столбцы не клонировались а заполнялись
Код для примера приведен ниже, необходимо написать такой мердж, чтобы значения столбцов value (таких столбцов на реальных данных будет много) не дублировалось в результате. То есть не было в итоговой таблице value_x, value_y, а были только value, value2 и value3.
df1 = pd.DataFrame({'key': ['foo', 'bar', 'baz'],
'value': [1, 1, 1],
'value2': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'foo'],
'value': [1, 1, 1, 1],
'value3': [1, 2, 3,4]})
df1.merge(df2, how='outer', on='key')
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Не знаю, как это делается оптимально, но можно оставить одну колонку без суффикса, а другую потом просто удалить:
df3 = df1.merge(df2, how='outer', on='key', suffixes=(None,'_del')).drop(columns='value_del')
df3
Вывод:
key value value2 value3
0 foo 1 1 1
1 foo 1 1 4
2 bar 1 2 2
3 baz 1 3 3
Автор решения: SergFSM
→ Ссылка
если в результирующей таблице не нужны значения values из df1 то можно просто из дропнуть перед тем как делать merge, примерно так:
df1 = pd.DataFrame({'key': ['foo', 'bar', 'baz'],
'value': [1, 1, 1],
'value2': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['foo', 'bar', 'baz', 'fiz'],
'value': [1, 1, 1, 1],
'value3': [1, 2, 3,4]})
df3 = df2.merge(df1.drop(columns='value'), how='outer', on='key')
вывод:
key value value3 value2
0 foo 1 1 1.0
1 bar 1 2 2.0
2 baz 1 3 3.0
3 fiz 1 4 NaN