如何在熊猫中进行“(df1&not df2)”数据框合并?
Posted
技术标签:
【中文标题】如何在熊猫中进行“(df1&not df2)”数据框合并?【英文标题】:How to do "(df1 & not df2)" dataframe merge in pandas? 【发布时间】:2015-12-17 00:29:06 【问题描述】:我有 2 个 Pandas 数据帧 df1 和 df2,它们具有公共列/键 (x,y)。
我想合并对键 (x,y) 执行“(df1 & not df2)”类型的合并,这意味着我希望我的代码返回一个数据帧,其中包含仅在 df1 中且不包含 (x,y) 的行在df2中。
SAS 具有相同的功能
data final;
merge df1(in=a) df2(in=b);
by x y;
if a & not b;
run;
谁来优雅地在 pandas 中复制相同的功能? 如果我们可以在 merge() 中指定 how="left-right" 那就太好了。
【问题讨论】:
【参考方案1】:我刚刚升级到 10 天前发布的 0.17.0 RC1 版本。 刚刚发现 pd.merge() 在这个新版本中有一个名为 indicator=True 的新参数,以实现这一点!!
df=pd.merge(df1,df2,on=['x','y'],how="outer",indicator=True)
df=df[df['_merge']=='left_only']
indicator:向输出 DataFrame 添加一个名为 _merge 的列,其中包含有关每行来源的信息。 _merge 是分类类型,对于合并键仅出现在“左”数据帧中的观察,取值 left_only,对于合并键仅出现在“右”数据帧中的观察,如果观察的合并键在两者中都找到,则两者都取值.
http://pandas-docs.github.io/pandas-docs-travis/merging.html#database-style-dataframe-joining-merging
【讨论】:
过滤数据框的正确方法如下,需要更正代码的第二行:df=df[df['_merge']=='left_only'] 感谢您指出错字。我已根据您的评论修复它。 我发现这个链接对于这个和其他场景非常有帮助! kanoki.org/2019/07/04/pandas-difference-between-two-dataframes以上是关于如何在熊猫中进行“(df1&not df2)”数据框合并?的主要内容,如果未能解决你的问题,请参考以下文章