对比两个单id列Pandas DataFrame,提取df1中独有的id值
实现方案
方法1:isin 筛选(推荐,写法简洁高效,保留df1中的重复id)
直接通过反向匹配df2的id值筛选结果:
import pandas as pd colnames = ['id'] df1 = pd.read_csv(r'file1.csv', names=colnames) df2 = pd.read_csv(r'file2.csv', names=colnames) # 核心代码:筛选df1中id不在df2里的行 result = df1[~df1['id'].isin(df2['id'])]
输出结果符合预期:
id 3 4 4 5
方法2:merge 实现(适配需要关联多字段的复杂场景)
你之前用了how='right'右连接,方向完全反了,应该用左连接配合标记位筛选:
import pandas as pd colnames = ['id'] df1 = pd.read_csv(r'file1.csv', names=colnames) df2 = pd.read_csv(r'file2.csv', names=colnames) # 左连接并添加关联标记 df = df1.merge(df2, on='id', how='left', indicator=True) # 筛选仅在df1中存在的行 result = df[df['_merge'] == 'left_only'][['id']]
方法3:集合差集(仅需要去重结果时使用)
如果不需要保留df1中的重复id,只要去重后的差集,可以用集合运算:
unique_diff_ids = set(df1['id']) - set(df2['id']) result = pd.DataFrame({'id': list(unique_diff_ids)})
内容的提问来源于stack exchange,提问作者RK.
相关产品推荐
相关产品推荐

