比较两个dataframe并获得它们之间的差异作为输出



我有两个数据帧如下:

df1 = [['tom', 10],['nick',15], ['juli',14]]
df2= [['juli', 14],['daniel',15], ['tom',10], ['tom',10]]

请注意,数据帧可能没有相同的索引顺序,但我希望接收它们之间的差异作为输出。

所以我希望输出是:

['nick',15]
['daniel',15]
['tom',10]

如果可能的话,我想知道哪个数据帧包含每个值。在上面的例子中,第一项(['nick',15])属于df1,其他项属于df2

奖金:有办法将输出到Excel导出吗?

假设输入:

df1 = pd.DataFrame([['tom', 10],['nick',15], ['juli',14]])
df2 = pd.DataFrame([['juli', 14],['daniel',15], ['tom',10], ['tom',10]])

您可以使用mergeindicator选项。

这里的基本原理是创建一个额外的列,每个组有一个索引来标识重复项。

cols = list(df1.columns)
(df1.assign(idx=df1.groupby(cols).cumcount())
.merge(df2.assign(idx=df2.groupby(cols).cumcount()),
on=list(df1.columns)+['idx'],
indicator=True,
how='outer')
.drop('idx', axis=1)
.query('_merge != "both"')
#.to_excel('output.xlsx')  ## uncomment to export as xlsx
)

输出:

0   1      _merge
1    nick  15   left_only
3  daniel  15  right_only
4     tom  10  right_only

最新更新