如何判断DataFrame某列值是否存在于另一DataFrame列中
解决方案:检查DataFrame中姓名是否存在并返回标识
首先,先明确你的需求:遍历Df1['name']的每个元素,判断是否在Df2['IDs']中,存在返回1,不存在返回0,最后输出指定格式的结果。
方法一:用pandas向量化操作(推荐,效率更高)
pandas里尽量避免逐行遍历,用isin()方法可以快速完成判断,然后转成整数类型即可:
import pandas as pd # 初始化你的DataFrame Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad']}) Df2 = pd.DataFrame({'IDs': ['Jake', 'John', 'Marc', 'Tony', 'Bob']}) # 生成判断结果列 Df1['exists'] = Df1['name'].isin(Df2['IDs']).astype(int) # 按你想要的格式输出 for idx, row in Df1.iterrows(): print(f"{row['name']} {row['exists']}")
运行这段代码就能得到你期望的输出:
Marc 1 Jake 1 Sam 0 Brad 0
方法二:逐行遍历(如果一定要手动遍历的话)
如果你确实需要逐行处理,也可以这样写:
import pandas as pd Df1 = pd.DataFrame({'name': ['Marc', 'Jake', 'Sam', 'Brad']}) Df2 = pd.DataFrame({'IDs': ['Jake', 'John', 'Marc', 'Tony', 'Bob']}) # 把Df2的IDs转成集合,查询效率更高 id_set = set(Df2['IDs']) # 遍历Df1的每一行 for name in Df1['name']: # 判断是否在集合中,存在返回1,否则0 result = 1 if name in id_set else 0 print(f"{name} {result}")
这个方法也能得到同样的结果,不过当数据量很大时,方法一的向量化操作速度会快很多,所以更推荐第一种。
内容的提问来源于stack exchange,提问作者toceto
相关产品推荐
相关产品推荐

