比较 Pandas Dataframe 的匹配行和列的差异
Comparing Pandas Dataframe's matching rows and column for differences
我想知道比较两个数据帧的每个单元格的最佳方法是什么,仅针对与第一个数据帧行和列匹配的单元格,例如:
df1 =
df2 =
我想要的输出是获取两个数据帧之间具有相同项目名称的 df2 行和 df2 中存在的 df1 中的列的每个单元格更改,在这种情况下:
欢迎提出任何关于如何针对更大的数据帧而不是两个循环执行此操作的想法。
你可以使用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']])
它打印以下数据框:
|--|----|------|---------|---------|
| |item|column|value_old|value_new|
|--|----|------|---------|---------|
|1 | B |value |2 |1 |
|3 | D |value |4 |5 |
|--|----|------|---------|---------|
我想知道比较两个数据帧的每个单元格的最佳方法是什么,仅针对与第一个数据帧行和列匹配的单元格,例如:
df1 =
df2 =
我想要的输出是获取两个数据帧之间具有相同项目名称的 df2 行和 df2 中存在的 df1 中的列的每个单元格更改,在这种情况下:
欢迎提出任何关于如何针对更大的数据帧而不是两个循环执行此操作的想法。
你可以使用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']])
它打印以下数据框:
|--|----|------|---------|---------|
| |item|column|value_old|value_new|
|--|----|------|---------|---------|
|1 | B |value |2 |1 |
|3 | D |value |4 |5 |
|--|----|------|---------|---------|