Объединить два датафрейма 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 шт):

Автор решения: Sobolenko.Evgeniy

Такое может происходить, если одному набору ключей в левой таблице соответствует несколько строк с таким же набором ключей в правой таблице.

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' ])
→ Ссылка