确定数据框中值的变化和新行



假设以下两个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

如果您愿意,可以将它们连接起来。

相关内容

  • 没有找到相关文章

最新更新