首页 > 解决方案 > 比较 Pandas Dataframe 的匹配行和列的差异

问题描述

我想知道哪个是比较两个数据帧的每个单元格的最佳方法,仅适用于与第一个数据帧行和列匹配的单元格,例如:

df1 =

在此处输入图像描述

df2 =

在此处输入图像描述

我想要的输出是获取具有相同项目名称的 df2 行和 df2 中存在的 df1 列的两个数据帧之间的每个单元格更改,在这种情况下:

在此处输入图像描述

欢迎任何关于如何为更大的数据帧而不是两个循环执行此操作的想法。

标签: pythonpandasdataframecomparison

解决方案


你可以使用pd.melt来做你想做的事。

就像在这个例子中:

import pandas as pd

df_before = pd.DataFrame({'item':['A','B','C', 'D'], 'value':[1,2,3,4]})
df_after = pd.DataFrame({'item':['A','B','C', 'D'], 'value':[1,1,3,5]})

melt_before = df_before.melt(id_vars=['item'], value_vars=['value'], var_name='column')
melt_after = df_after.melt(id_vars=['item'], value_vars=['value'], var_name='column')

diff = melt_before.merge(melt_after, on=['item', 'column'], suffixes=('_old', '_new'))

print(diff[diff['value_old'] != diff['value_new']])

它打印以下 Dataframe :

|--|----|------|---------|---------|
|  |item|column|value_old|value_new|
|--|----|------|---------|---------|
|1 |  B |value |2        |1        |
|3 |  D |value |4        |5        |
|--|----|------|---------|---------|

推荐阅读