如何在Pandas中根据不同DataFrame列值相等筛选数据?
问题原因
你写的df1.A == df2.B是在逐行对比两个Series的值,Pandas要求这种对比必须是索引完全一致的Series才能执行,所以抛出了ValueError。但你的实际需求是筛选df1里A列的值在df2的B列中出现过的行,显然不该用逐行对比的逻辑。
最优解决方法
1. 先筛选出所有符合条件的行
用isin()方法直接判断df1.A的每个值是否在df2.B的集合里,这是Pandas处理这类需求的标准写法,不用改列名:
df_filtered = df1[df1['A'].isin(df2['B'])]
运行后得到的结果是所有A列值在df2.B中存在的行:
A 0 apple 1 pear 2 orange 3 apple
2. 匹配你的示例输出(去重保留首次出现)
如果要和你给出的示例输出完全一致(每个唯一值只保留第一行),在上面的基础上加上drop_duplicates():
df_filtered = df1[df1['A'].isin(df2['B'])].drop_duplicates(subset='A', keep='first')
执行后就得到你想要的结果:
A 0 apple 2 orange
补充说明
isin()的效率很高,适合处理大数据量的情况;drop_duplicates()的参数可以调整:keep='last'会保留每个值的最后一行,keep=False会删除所有重复的行;- 全程不需要修改任何列名,完全满足你的要求。
内容的提问来源于stack exchange,提问作者geds133
相关产品推荐
相关产品推荐

