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)
一种方法是对齐索引,然后使用掩码。
# 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)
不需要重置索引,但需要提升Company和SKU列。