Вот решение с использованием duplicated
и drop_duplicates
. Сначала необходимо объединить два кадра данных, для чего нужно убедиться, что имена столбцов совпадают.
Если имена ваших столбцов действительно совпадают в df1
и df2
, выполните:
new_df = (pd.concat([df1,df2])[pd.concat([df1,df2])
.duplicated(subset=['col1','cold4'], keep=False)]
.drop_duplicates(subset=['cold2', 'cold3']))
Что возвращает:
>>> new_df
col1 cold2 cold3 cold4
0 a bb cc d
0 a ee ff d
Если вам нужно переименовать столбцы в df2
, чтобы они соответствовали именам столбцов df1
без изменения исходных кадров данных, вы можете просто добавить этот шаг:
concat_dfs = pd.concat([df1, df2.rename(columns={i2:i1 for i1,i2
in zip(df1.columns,df2.columns)})])
new_df = (concat_dfs[concat_dfs.duplicated(subset=['col1', 'cold4'], keep=False)]
.drop_duplicates(subset=['cold2', 'cold3']))