Объединить два датафрейма Pandas по ключу с помощью merge
При объединении двух датафреймов появляются лишние строки. Объясню на примере: датафрейм1(50 строк), к нему присоединяю столбцы датафрейма2 (16 млн строк) по 4м ключам, получается итоговый датафрейм 51 строка. Причём это одна лишняя строка - дублирует одну из строк, т. е. по сути количество строк увеличивается за счет строк - дублеров. В чем может быть причина? Конечно можно удалить дублёры после, но хотелось бы чтобы они не образовывались изначально. (По типам данных - всё нормально, проверяла)
Вот примеры кода (2 варианта):
df_merged1 = pd.merge(
res_test1, df3_,
left_on=['uuid', 'id_route', 'vehicle_type', 'time' ],
right_on=['uuid', 'id_route', 'vehicle_type', 'time' ]
)
df_merged2 = res_test1.merge(df3_, on=['uuid', 'id_route', 'vehicle_type', 'time' ])
Ответы (1 шт):
Такое может происходить, если одному набору ключей в левой таблице соответствует несколько строк с таким же набором ключей в правой таблице.
import pandas as pd
df1 = pd.DataFrame.from_dict({'1': [1, 2],
'2': ['a', 'b']})
df2 = pd.DataFrame.from_dict({'1': [1, 2, 2, 3],
'3': ['a', 'd', 'd', 'c']})
result1 = pd.merge(df1, df2)
display(result1)
Получим:
1 | 2 | 3 |
---|---|---|
1 | a | a |
2 | b | d |
2 | b | d |
Тогда нужно оставить лишь одну строку с уникальным набором ключей, используя drop_duplicates
на правом наборе данных до слияния.
df_merged2 = res_test1.merge(df3_.drop_duplicates(['uuid', 'id_route', 'vehicle_type', 'time']), on=['uuid', 'id_route', 'vehicle_type', 'time' ])