如何在新Pandas DataFrame中添加另一DataFrame中无匹配值的行?
Pandas筛选DataFrame中不匹配的行
原始数据示例
>>> df1 A 0 value1 1 value2 2 value3 3 value4 4 value5 >>> df2 A 0 value2 1 value3 2 value4
需求说明
生成df3,仅保留df1中A列值不在df2.A中的行,最终结果如下:
>>> df3 A 0 value1 1 value5
注:df1和df2除A列外可能包含其他列,且A列所有值均为字符串。
实现方案
方案一:利用isin()取反筛选
通过isin()生成布尔掩码,再对掩码取反(~),直接筛选出符合条件的行,无需单独保留布尔值结果:
# 生成筛选掩码,筛选df1.A不在df2.A中的行 mask = ~df1['A'].isin(df2['A']) df3 = df1[mask].reset_index(drop=True)
方案二:通过merge()实现左连接筛选
借助左连接操作,保留df1中无法与df2匹配的行,具体步骤如下:
# 左连接df1与df2,添加_merge列标记匹配状态 df3 = df1.merge(df2, on='A', how='left', indicator=True) # 筛选仅在df1中存在的行,移除_merge列并重置索引 df3 = df3[df3['_merge'] == 'left_only'].drop(columns='_merge').reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Nick Seymour
相关产品推荐
相关产品推荐

