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

Python Pandas如何删除DataFrame中不含列表全部元素的行

Pandas 筛选包含指定全部字母的行

问题场景

给定字母列表:

letters = ['E', 'H', 'T', 'D']

现有如下结构的DataFrame:

letter_1 letter_2 letter_3 letter_4 letter_5   word
0        D        E        B        U        T    DEBUT
1        D        E        B        U        G    DEBUG
2        B        E        G        E        T    BEGET
3        D        E        P        T        H    DEPTH
4        D        U        V        E        T    DUVET

需要过滤掉所有未包含letters列表中全部元素的行,仅保留覆盖所有指定字母的行。

实现方案

因为DataFrame中已经有拼接好的word列,直接基于该列做判断是最简洁的实现方式:

import pandas as pd

# --------------- 示例数据构造 ---------------
df = pd.DataFrame({
    'letter_1': ['D','D','B','D','D'],
    'letter_2': ['E','E','E','E','U'],
    'letter_3': ['B','B','G','P','V'],
    'letter_4': ['U','U','E','T','E'],
    'letter_5': ['T','G','T','H','T'],
    'word': ['DEBUT','DEBUG','BEGET','DEPTH','DUVET']
})
letters = ['E', 'H', 'T', 'D']

# --------------- 过滤逻辑 ---------------
# 逐行判断当前单词是否包含所有指定字母
mask = df['word'].apply(lambda word: all(c in word for c in letters))
result = df[mask].reset_index(drop=True)

如果你不想依赖word列,要基于letter_1到letter_5的原始列做判断,可以用下面的写法:

# 提取所有字母列
letter_cols = [col for col in df.columns if col.startswith('letter_')]
# 逐行判断所有字母列的取值是否覆盖全部指定字母
mask = df[letter_cols].apply(lambda row: all(c in row.values for c in letters), axis=1)
result = df[mask].reset_index(drop=True)

运行结果

两种写法得到的过滤结果一致,最终仅保留符合要求的行:

letter_1 letter_2 letter_3 letter_4 letter_5   word
0        D        E        P        T        H  DEPTH

逻辑说明

核心判断用了all()函数,只有当letters里的每一个字符都在当前行的对应内容中存在时,才会返回True,最终通过布尔索引筛选出所有符合条件的行即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 04:15:55