pandas 基于几列删除存在于另一个pd.dataframe中的行?

hzbexzde  于 2023-03-11  发布在  其他
关注(0)|答案(3)|浏览(160)

我有df a和df B,如果matchcolumns(颜色和值)同时存在于a和b中,我需要得到df c。
我目前掌握的情况:

c = a[a[matchcolumns] == b[matchcolumns]]

a
color value cost
red 0.1 5.99
blue 0.2 6.99
green 0.3 9.99

b
color value cost
red 0.1 0.9

c 
color value cost
blue 0.2 6.99
green 0.3 9.99
0h4hbjxa

0h4hbjxa1#

看看下面的代码是否给出了您要查找的结果

c = pd.merge(a, b, on=['color', 'value'], how='inner')
c.head()
mzsu5hc0

mzsu5hc02#

使用带指示器的外部merge并删除公共行:

cols = ['color', 'value']

c = (a.merge(b[cols], on=cols,
             how='outer', indicator=True)
      .loc[lambda d: d.pop('_merge').ne('both')]
     )

或者,如果两个输入中没有重复项:

c = (
 pd.concat([a, b])
   .drop_duplicates(subset=cols, keep=False)
)

输出:

color  value  cost
1   blue    0.2  6.99
2  green    0.3  9.99
ykejflvf

ykejflvf3#

mrg_idx = pd.merge(a[['color', 'value']],b[['color', 'value']]).index

print( a.iloc[mrg_idx] )
color  value  cost
0   red    0.1  5.99

相关问题