Python 有人能解释一下这段代码来识别两个数据帧之间的差异吗?

Python 有人能解释一下这段代码来识别两个数据帧之间的差异吗?,python,pandas,dataframe,stack,concat,Python,Pandas,Dataframe,Stack,Concat,我在网上找到了这段代码,用于比较两个csv文件并打印差异,我不太确定前两行后面的逻辑,有人能解释一下吗,非常感谢。resultBool是一个DataFrame.stack()的结果将名为result\u 01和result\u 02的两个csv文件的结果分解为True和False值的单列,列名现在堆叠为多索引,表示两者之间是否存在差异,True表示自结果\u 01!=结果\u 02 resultdiff通过传入resultBool来水平执行一个pd.concat,它将只保存上述resultBoo

我在网上找到了这段代码,用于比较两个csv文件并打印差异,我不太确定前两行后面的逻辑,有人能解释一下吗,非常感谢。

resultBool
是一个
DataFrame.stack()的结果
将名为
result\u 01
result\u 02
的两个csv文件的结果分解为
True
False
值的单列,列名现在堆叠为
多索引
,表示两者之间是否存在差异,
True
表示自
结果\u 01!=结果\u 02

resultdiff
通过传入
resultBool
来水平执行一个
pd.concat
,它将只保存上述
resultBool
的结果

之后,
resultdiff
将设置列

有关更多信息,您应该查看涉及的pandas函数,以及在每行代码之后打印数据帧,以查看发生了什么



resultBool
是一个
DataFrame.stack()
的结果,它将名为
result\u 01
result\u 02
的两个csv文件的结果分解为
True
False
值的单列,列名称现在被堆叠为
multi-index
,表示两者之间是否存在差异,
True
表示自
结果\u 01!=结果\u 02

resultdiff
通过传入
resultBool
来水平执行一个
pd.concat
,它将只保存上述
resultBool
的结果

之后,
resultdiff
将设置列

有关更多信息,您应该查看涉及的pandas函数,以及在每行代码之后打印数据帧,以查看发生了什么



例如,让我们考虑下面两个新创建的数据帧:

将熊猫作为pd导入
#创建第一个数据帧
df1=pd.DataFrame({“A”:[1,5,7,8],
“B”:[5,8,4,3],
“C”:[10,4,9,3]})
#创建第二个数据帧
df2=pd.DataFrame({“A”:[5,3,6,4],
“B”:[11,2,4,3],
“C”:[4,3,8,5]})
它们看起来像这样:

表达式不等于
=仅返回一个新df,其中值不相等,且为真/假

stack
使用新索引重塑数据帧。更多信息

resultBool=(df1!=df2).stack()
上面的行将结果df(如第二张图所示)保存在变量中

下一行从原始数据帧中过滤掉所有假值

注意索引
2b
是如何丢失的,因为
resultBool
df中的值为false

这意味着此特定单元格的df1和df2中的值相等,因此结果为
=运算符为false

对于df2,我们也在做同样的事情,只是将结果水平连接起来。有关熊猫连接的更多信息

在上图中,“0”列表示df1中的值,“1”列表示df2中的值

最后,我们将这些列重命名为“output_01”和“output_02”:


最终的结果是一个新的DF突出显示在两个数据帧中不同的值。例如:

< P>,让我们考虑下面两个新创建的数据帧:

将熊猫作为pd导入
#创建第一个数据帧
df1=pd.DataFrame({“A”:[1,5,7,8],
“B”:[5,8,4,3],
“C”:[10,4,9,3]})
#创建第二个数据帧
df2=pd.DataFrame({“A”:[5,3,6,4],
“B”:[11,2,4,3],
“C”:[4,3,8,5]})
它们看起来像这样:

表达式不等于
=仅返回一个新df,其中值不相等,且为真/假

stack
使用新索引重塑数据帧。更多信息

resultBool=(df1!=df2).stack()
上面的行将结果df(如第二张图所示)保存在变量中

下一行从原始数据帧中过滤掉所有假值

注意索引
2b
是如何丢失的,因为
resultBool
df中的值为false

这意味着此特定单元格的df1和df2中的值相等,因此结果为
=运算符为false

对于df2,我们也在做同样的事情,只是将结果水平连接起来。有关熊猫连接的更多信息

在上图中,“0”列表示df1中的值,“1”列表示df2中的值

最后,我们将这些列重命名为“output_01”和“output_02”:


最终结果是一个新的df,突出显示两个数据帧中不同的值。

嗨,Cecilia,请提供一个。没有什么特别的,只是确定在哪里
结果\u 01!=结果_02
,然后在存在差异的叠加df处进行计算。看一看HI Cecilia,请提供一个。没有什么特别的,只是确定结果在哪里结果_02
,然后在存在差异的叠加df处进行计算。您好,谢谢,但另一个答案更容易理解,我真的很感谢您的努力。晚上好。嗨,谢谢,但是另一个答案更容易理解,我真的很感谢你的努力。晚上好。
resultBool = (results_01 != results_02).stack() 
resultdiff = pd.concat([results_01.stack()[resultBool], results_02.stack()[resultBool]], axis=1)
resultdiff.columns=["output_01", "output_02"]