Pandas/Python: Как объединить два кадра данных без дубликатов?
Я хотел бы объединить два dataframes A, B в новый без повторяющихся строк (если строки из B уже существуют в A, не добавляйте):
Dataframe A: Dataframe B:
I II I II
0 1 2 5 6
1 3 1 3 1
Новый Dataframe:
I II
0 1 2
1 3 1
2 5 6
Как я могу это сделать?
Ответы
Ответ 1
Самый простой способ - просто выполнить конкатенацию, а затем удалить.
>>> df1
A B
0 1 2
1 3 1
>>> df2
A B
0 5 6
1 3 1
>>> pandas.concat([df1,df2]).drop_duplicates().reset_index(drop=True)
A B
0 1 2
1 3 1
2 5 6
reset_index(drop=True)
должен зафиксировать индекс после concat()
и drop_duplicates()
. Без него у вас будет индекс [0,1,0]
вместо [0,1,2]
. Это может вызвать проблемы для дальнейших операций с этим dataframe
по дороге, если это не reset сразу.
Ответ 2
Если у вас есть дублирующаяся строка уже в DataFrame A, а затем конкатенация и последующее удаление повторяющихся строк будут удалять строки из DataFrame A, которые вы, возможно, захотите сохранить.
В этом случае вам нужно будет создать новый столбец с суммарным счетчиком, а затем удалить дубликаты, все зависит от вашего варианта использования, но это часто встречается в данных временных рядов
Вот пример:
df_1 = pd.DataFrame([
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':6, 'value':34},])
df_2 = pd.DataFrame([
{'date':'11/20/2015', 'id':4, 'value':24},
{'date':'11/20/2015', 'id':6, 'value':14},
])
df_1['count'] = df_1.groupby(['date','id','value']).cumcount()
df_2['count'] = df_2.groupby(['date','id','value']).cumcount()
df_tot = pd.concat([df_1,df_2], ignore_index=False)
df_tot = df_tot.drop_duplicates()
df_tot = df_tot.drop(['count'], axis=1)
>>> df_tot
date id value
0 11/20/2015 4 24
1 11/20/2015 4 24
2 11/20/2015 6 34
1 11/20/2015 6 14