假设以下两个pandas dataframe:
df1 = pd.DataFrame({
'col1': ['value 1', 'value 2', 'value 3'],
'col2': ['value 1', 'value 2', 'value 3'],
})
df2 = pd.DataFrame({
'col1': ['value X', 'value 2', 'value 3', 'value 4'],
'col2': ['value 1', 'value 2', 'value 3', 'value 4'],
})
col1 col2
0 value 1 value 1
1 value 2 value 2
2 value 3 value 3
col1 col2
0 value X value 1
1 value 2 value 2
2 value 3 value 3
3 value 4 value 4
最好的方法是:A)找出df1和df2之间值的所有差异(即。'value 1' vs 'value X' (col1)B)找到df2
的添加项目前,我被下面的代码困住了,这并不能完全满足我的需求:
df3 = pd.concat([df1, df2])
df3.reset_index(drop=True, inplace=True)
df3_grouped = df3.groupby(list(df3.columns))
idx = [x[0] for x in df3_grouped.groups.values() if len(x) == 1]
print(df3.reindex(idx))
col1 col2
0 value 1 value 1
6 value 4 value 4
3 value X value 1
您可以尝试:
df1['label'] = 'df1'
df2['label'] = 'df2'
key_cols = df1.columns.intersection(df2.columns).difference(set(['label']))
pd.concat([df1,df2]).drop_duplicates(
subset=key_cols,
keep=False,
)
输出:
col1 col2 label
0 value 1 value 1 df1
0 value X value 1 df2
3 value 4 value 4 df2
一种方法是使用isin
:
df1[~df1.isin(df2).all(1)]
输出:
col1 col2
0 value 1 value 1
对于df2
df2[~df2.isin(df1).all(1)]
输出:
col1 col2
0 value X value 1
3 value 4 value 4
如果您愿意,可以将它们连接起来。