Pandas逐行比较两列集合 提取To_check列中Reference列不存在的元素
问题原因
isin() 方法本身不支持逐行比较,它的逻辑是检查当前列的每个元素是否存在于传入的整个参考序列中,并非逐行匹配两列的对应元素,因此你的写法既达不到需求,还会因为赋值维度不匹配触发报错。
实现方案
因为你的两列数据本身就是集合类型,直接用 apply 逐行计算两个集合的差集即可,一行代码就能实现需求,完全保留原DataFrame所有数据仅追加新列:
df['New'] = df.apply(lambda row: row['To_check'] - row['Reference'], axis=1)
如果后续你把列内数据换成了列表类型,只需要在计算时先转成集合即可,示例如下:
# 适配列值为列表的场景 df['New'] = df.apply(lambda row: list(set(row['To_check']) - set(row['Reference'])), axis=1)
执行上述代码后得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Luis Manuel Quiros guerrero
相关产品推荐
相关产品推荐

