使用pd.isin()判断DataFrame某列值是否在另一列列表内失效原因咨询
问题原因
pd.Series.isin()的设计逻辑是:对左侧序列的每一个元素,判断其是否存在于右侧传入的整个可迭代对象的所有元素集合中,而非逐行对应匹配。
你调用df.x.isin(df.y)时,实际执行的逻辑是:逐个判断x列的每个数值,是否等于y列中的任意一个元素(y列的元素是列表,也就是判断数值是否等于某个列表),显然永远返回False,因此筛选不到任何结果。
正确实现方案
方法1:逐行apply(写法直观,适合小数据集)
通过axis=1指定按行遍历,逐行判断当前行x取值是否在同行y列表中:
result = df[df.apply(lambda row: row['x'] in row['y'], axis=1)]
方法2:列表推导式(性能更优,适合大数据集)
直接对两列元素配对判断,避免apply的额外开销:
result = df[[x in y for x, y in zip(df['x'], df['y'])]]
两种方法得到的结果一致,符合筛选预期:
| x | y |
|---|---|
| 0 | [0, 2] |
| 2 | [2, 3] |
| 3 | [3, 4] |
内容的提问来源于stack exchange,提问作者PingPong
相关产品推荐
相关产品推荐

