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

如何筛选包含指定列表所有值的Pandas DataFrame行

Pandas筛选包含指定列表所有值的行

问题描述

现有如下DataFrame:

C1  C2  C3  C4
1  A   B   C   E
2  C   D   E   F
3  A   C   A   B
4  A   A   B   G
5  B   nan C   E

以及筛选列表 filt = ['A', 'B', 'C'],需要筛选出包含该列表全部值的行(值的顺序、位置不限,允许存在其他值),期望输出:

C1  C2  C3  C4
1  A   B   C   E
3  A   C   A   B  

解决方案

方法1:集合子集判断法

通过apply遍历每行,先剔除空值再转为集合,判断筛选列表的集合是否是该行集合的子集:

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame(
    data=[
        ['A', 'B', 'C', 'E'],
        ['C', 'D', 'E', 'F'],
        ['A', 'C', 'A', 'B'],
        ['A', 'A', 'B', 'G'],
        ['B', pd.NA, 'C', 'E']
    ],
    columns=['C1', 'C2', 'C3', 'C4'],
    index=[1, 2, 3, 4, 5]
)

filt = ['A', 'B', 'C']

# 生成筛选掩码:检查筛选列表的所有元素是否都在该行非空值中
mask = df.apply(lambda row: set(filt).issubset(row.dropna()), axis=1)
# 应用掩码得到结果
result_df = df[mask]

print(result_df)

方法2:逐个元素校验法

对筛选列表中的每个元素,逐一检查该行是否包含该元素,最终保留所有元素都满足的行:

# 生成筛选掩码:每行必须包含filt中的每一个元素
mask = df.apply(lambda row: all(val in row.values for val in filt), axis=1)
result_df = df[mask]

print(result_df)

两种方法均可得到期望输出:方法1自动忽略空值,适配含缺失值的场景;方法2逻辑更直白,适合快速理解筛选逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:27:49