如何用Pandas判断DataFrame中ID1列值是否存在于ID2列?
问题解决:判断每行ID1是否存在于ID2列全集
错误原因分析
你之前的代码逻辑有误:df_test.drop("ID1", 1).isin(df_test["ID2"]).any(1) 实际上是检查每行的ID2值是否在ID2列中(等于自己查自己),所以结果全为True,完全不符合你要判断ID1是否在ID2列的需求。
正确实现代码
import pandas as pd # 初始化数据 data = [[1, 10], [2, 15], [10, 14]] df_test = pd.DataFrame(data, columns=['ID1', 'ID2']) # 提取ID2列的所有值为集合(提升查找效率) id2_values = set(df_test['ID2']) # 生成Exists列:判断每行ID1是否在ID2的全集里 df_test['Exists'] = df_test['ID1'].isin(id2_values) # 输出结果 print(df_test.to_csv(index=False))
执行结果
执行后会输出你期望的结果:
ID1,ID2,Exists 1,10,False 2,15,False 10,14,True
补充说明
- 用
set()转换ID2列是为了提升大规模数据下的查找效率,直接用df_test['ID1'].isin(df_test['ID2'])也能得到正确结果,但集合的查找速度更快。 - 如果需要保留布尔值的大小写(比如输出
True/False而不是小写),可以不用额外处理,Pandas默认输出的布尔值就是首字母大写的格式。
内容的提问来源于stack exchange,提问作者Chubaka
相关产品推荐
相关产品推荐

