【问题标题】:Comparing Pandas Dataframe's matching rows and column for differences比较 Pandas Dataframes 匹配行和列的差异
【发布时间】:2020-05-13 07:59:10
【问题描述】:

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

df1 =

df2 =

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

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

【问题讨论】:

  • 请将您的示例数据作为文本而不是图像。这使得它很难按原样使用。
  • 请don't add data or code as pictures。您可以使用print(df1) 并将输出复制并粘贴到您的问题中。
  • 好的,不知道。下次会做,谢谢。

标签: python pandas dataframe comparison


【解决方案1】:

您可以使用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        |
|--|----|------|---------|---------|

【讨论】:

  • 正是我需要的,不知道这个功能。谢谢!
猜你喜欢
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 2012-10-18
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-03
相关资源
最近更新 更多