【问题标题】:Compare column values of two dataframes using pandas使用 pandas 比较两个数据框的列值
【发布时间】:2020-05-30 22:32:27
【问题描述】:

我是 python 新手,所以请放轻松。我一直在查找类似的线程,但无法为我的问题找到一个简洁的解决方案:

我想比较两个数据框的列值并将不同的值放在新的数据框中 我的数据框在下面并且长度不同(即行数)。我想比较每个 SKU 的状态:

df1

SKU PRICE   Status
A   1798    0
C   1798    1
D   999     0
E   1299    1
F   999     0


df2

SKU PRICE   Status
A   1798    1
B   2997    1
C   1798    1
D   999     0

比较 df2 和 df1 我想要关注 df3

SKU PRICE Status
A   1798  0   

我知道它可以通过循环来完成,但我希望通过 pandas 或 itertools 有更好的解决方案?

感谢您的帮助

df1:

df2:

【问题讨论】:

  • 您的预期输出看起来有点不对劲。请您再检查一遍好吗?
  • 这里的预期结果是什么?要返回状态不同的匹配 SKU 价格行?这听起来像是一个额外步骤的合并问题:df1.merge(df2, on=['SKU', 'PRICE']).query('Status_x != Status_y')
  • 您好,仅 SKU A 的状态已更改。因此预计新 DF 中只有一行

标签: python pandas dataframe


【解决方案1】:

这是一个简单的合并和过滤操作:

df1.merge(df2, on=['SKU', 'PRICE']).query('Status_x != Status_y')

  SKU  PRICE  Status_x  Status_y
0   A   1798         0         1

或者,更准确地说:

(df1.merge(df2, on=['SKU', 'PRICE'], suffixes=('', '_y'))
    .query('Status != Status_y')
    .drop('Status_y', 1))

  SKU  PRICE  Status
0   A   1798       0

【讨论】:

  • 哇,谢谢你似乎成功了。我有超过 4000 行。因此将运行其他检查以确保结果正确。但乍一看它看起来很棒。
  • @failsafe100 坚持使用您的用户名,这是正确的精神。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2017-03-08
相关资源
最近更新 更多