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

Mos*_*man 4 python merge filter pandas

我有 2 个数据框

df1

Company           SKU   Sales
Walmart           A     100
Total             A     200
Walmart           B     200
Total             B     300
Walmart           C     400
Walmart           D     500
Run Code Online (Sandbox Code Playgroud)

df2

 Company             SKU   Sales
 Walmart             A     400
 Total               B     300
 Walmart             C     900
 Walmart             F     400
 Total               G     500
Run Code Online (Sandbox Code Playgroud)

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

df2

Company       SKU   Sales 
Walmart       A     400
Total         B     300
Walmart       C     900
Run Code Online (Sandbox Code Playgroud)

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

有没有什么好的解决方案来实现这一目标?

Ant*_*vBR 13

更新

您可以使用一个简单的掩码:

m = df2.SKU.isin(df1.SKU)
df2 = df2[m]
Run Code Online (Sandbox Code Playgroud)

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

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

#  SKU  Sales
#0   A    100
#1   B    200
#2   C    300
Run Code Online (Sandbox Code Playgroud)

或这个:

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
Run Code Online (Sandbox Code Playgroud)


jpp*_*jpp 5

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

# 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()
Run Code Online (Sandbox Code Playgroud)

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