gpt4 book ai didi

python - 显示完整的行,突出显示数据帧 df1 、 df2 之间的差异,但仅当行单元格存在差异时

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:23 24 4
gpt4 key购买 nike

我有两个数据帧 df1 和 df2。相同的索引和相同的列名。如何构建一个显示差异的数据框,但只有至少有一个不同单元格的行?如果行有不同的单元格,但有些是相同的,则保持相同的单元格完整无缺。

例子:

df1=pd.DataFrame({1:['a','a'],2:['c','c']})
df2=pd.DataFrame({1:['a','a'],2:['d','c']})

需要的输出:

pd.DataFrame({1:['a'],2:['c->d']},index=[0])

此示例中的输出应该是一行数据框,而不是包含相同行的数据框

注意:输出应包含完整行,这些行在单元格中至少有一处不同

我想要一个无需按行迭代且无需在 DataFrame 中创建特殊字符串的高效解决方案

最佳答案

您可以使用 this brilliant solution :

def report_diff(x):
return x[0] if x[0] == x[1] else '{}->{}'.format(*x)

In [70]: pd.Panel(dict(df1=df1,df2=df2)).apply(report_diff, axis=0)
Out[70]:
1 2
0 a c->d
1 a c

对于更复杂的 DataFrame:

In [73]: df1
Out[73]:
A B C
0 a c 1
1 a c 2
2 1 2 3

In [74]: df2
Out[74]:
A B C
0 a d 1
1 a c 2
2 1 2 4

In [75]: pd.Panel(dict(df1=df1,df2=df2)).apply(report_diff, axis=0)
Out[75]:
A B C
0 a c->d 1
1 a c 2
2 1 2 3->4

更新:仅显示更改/不同的行:

In [54]: mask = df1.ne(df2).any(1)

In [55]: mask
Out[55]:
0 True
1 False
2 True
dtype: bool

In [56]: pd.Panel(dict(df1=df1[mask],df2=df2[mask])).apply(report_diff, axis=0)
Out[56]:
A B C
0 a c->d 1
2 1 2 3->4

关于python - 显示完整的行,突出显示数据帧 df1 、 df2 之间的差异,但仅当行单元格存在差异时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42566962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com