You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用列表值过滤Pandas DataFrame?求非循环实现方法

解决Pandas筛选列表列中包含指定值的问题

问题原因

你直接使用1 in df['B'](注:你代码里写的df['custom_test_type']应为笔误,实际目标列是df['B'])的逻辑存在错误:这个表达式是判断1是否存在于整个Series的索引或元素集合中,而非逐行检查每个列表元素是否包含1,因此会始终返回True,无法实现逐行筛选。

无循环的实现方法

以下是几种无需手动编写循环的高效筛选方式:

方法1:使用apply结合lambda

这是最直观的实现方式,Pandas内部会对apply操作做优化,避免手动循环的低效问题:

import pandas as pd

df = pd.DataFrame({'A' : [1,2,3,4], 'B' : [[1, 2, 3], [2, 3], [3], [1, 2, 3]]})
# 筛选B列包含1的行
filtered_df = df[df['B'].apply(lambda x: 1 in x)]
print(filtered_df)

方法2:使用map方法

逻辑与apply一致,语法更简洁:

filtered_df = df[df['B'].map(lambda x: 1 in x)]

方法3:使用numpy.vectorize实现矢量化判断

如果偏好矢量化风格的语法,可以用np.vectorize包装判断逻辑:

import pandas as pd
import numpy as np

df = pd.DataFrame({'A' : [1,2,3,4], 'B' : [[1, 2, 3], [2, 3], [3], [1, 2, 3]]})
contains_one = np.vectorize(lambda x: 1 in x)
filtered_df = df[contains_one(df['B'])]

输出结果

以上方法都会得到你预期的输出:

A          B
0  1  [1, 2, 3]
3  4  [1, 2, 3]

内容的提问来源于stack exchange,提问作者Max Tsai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:40:25