比较两个 DataFrame 并将它们之间的差异作为输出
Compare two DataFrames and get the differences between them as output
我有两个数据框如下:
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]])
您可以使用 merge
和 indicator
选项。
这里的基本原理是创建一个附加列,每个组都有一个索引来识别重复项。
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
我有两个数据框如下:
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]])
您可以使用 merge
和 indicator
选项。
这里的基本原理是创建一个附加列,每个组都有一个索引来识别重复项。
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