首页 > 解决方案 > Pandas 在比较 2 个数据帧时如何检查行来自哪个数据帧?

问题描述

我有以下代码比较 2 个数据帧中的 2 列,它实际上返回两个数据帧中不同的行,但我想获得不同的行,例如df1两者都不同:

df1 = pd.DataFrame([('a','b','src'), ('a','b','src'), ('c','b','src'),('a','d','src')],columns=['col1','col2','origin'])
df2 = df1.copy(deep=True)
df2['origin'] = 'tgt'
df1['col1'][3] = 't'
df2['col2'][2] = 't'
df1[(df1['col1'] != df2['col1']) | (df1['col2'] != df2['col2'])]

它给出了图像中的输出: 在此处输入图像描述

现在,在这里我确实看到了 2 个差异,但原始列始终是src. 我想要的是,不同但仅来自源的行数,即df1

标签: pythonpandasdataframe

解决方案


因为两个 s 中的相同列和相同索引DataFrame,所以可以在它们之间进行比较。

在布尔掩码中检查不等于df1并且还df2需要s:sumTrue

mask = (df1['col1'] != df2['col1']) | (df1['col2'] != df2['col2'])
print (mask)
0    False
1    False
2     True
3     True
dtype: bool

out = mask.sum()
print (out)
2

推荐阅读