根据另一个数据框的列值过滤数据框

新手上路,请多包涵

我有 2 个数据框

df1

 Company           SKU   Sales
Walmart           A     100
Total             A     200
Walmart           B     200
Total             B     300
Walmart           C     400
Walmart           D     500

df2

  Company             SKU   Sales
 Walmart             A     400
 Total               B     300
 Walmart             C     900
 Walmart             F     400
 Total               G     500

我想要一个结果数据框(df2),它只包含 df1 和 df2 中匹配 SKU 的记录

df2

 Company       SKU   Sales
Walmart       A     400
Total         B     300
Walmart       C     900

我只想要 df2 中 df1 的唯一(公司 + SKU)值

有什么好的解决方案可以实现这一目标吗?

原文由 Ahamed Moosa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 364
2 个回答

更新

你可以使用一个简单的面具:

 m = df2.SKU.isin(df1.SKU)
df2 = df2[m]


您正在寻找内部联接。尝试这个:

 df3 = df1.merge(df2, on=['SKU','Sales'], how='inner')

#  SKU  Sales
#0   A    100
#1   B    200
#2   C    300

或这个:

 df3 = df1.merge(df2, on='SKU', how='inner')

#  SKU  Sales_x  Sales_y
#0   A      100      100
#1   B      200      200
#2   C      300      300

原文由 Anton vBR 发布,翻译遵循 CC BY-SA 4.0 许可协议

一种方法是对齐索引,然后使用掩码。

 # align indices
df1 = df1.set_index(['Company',  'SKU'])
df2 = df2.set_index(['Company',  'SKU'])

# calculate & apply mask
df2 = df2[df2.index.isin(df1.index)].reset_index()

不需要重置索引,但需要将 CompanySKU 提升到列。

原文由 jpp 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题