怎么办"(df1&not df2)"数据框合并在熊猫?

Geo*_*eRF 8 python merge join dataframe pandas

我有2个pandas数据帧df1和df2与公共列/键(x,y).

我想在键(x,y)上合并做一个"(df1¬ df2)"类型的合并,这意味着我希望我的代码只在df1而不是在df2中返回包含(x,y)行的数据帧.

SAS具有同等功能

data final;
merge df1(in=a) df2(in=b);
by x y;
if a & not b;
run;
Run Code Online (Sandbox Code Playgroud)

谁优雅地在熊猫中复制相同的功能?如果我们可以在merge()中指定how"= left-right",那将会很棒.

Geo*_*eRF 16

我刚刚升级到10天前发布的版本0.17.0 RC1.刚刚发现pd.merge()在这个新版本中有一个名为indicator = True的新参数,以pandonic方式实现这一点!!

df=pd.merge(df1,df2,on=['x','y'],how="outer",indicator=True)
df=df[df['_merge']=='left_only']
Run Code Online (Sandbox Code Playgroud)

指示器:向名为_merge的输出DataFrame添加一列,其中包含每行源的信息._merge是分类型的,并且对于其合并键仅出现在'left'DataFrame中的观察值具有left_only的值,对于其合并键仅出现在'right'DataFrame中的观察的right_only,以及如果在两个中都找到观察的合并键的观察值.

http://pandas-docs.github.io/pandas-docs-travis/merging.html#database-style-dataframe-joining-merging

  • 过滤数据帧的正确方法如下,您需要更正代码的第二行:df = df [df ['_ merge'] =='left_only'] (2认同)