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

如何过滤DataFrame的列表列,保留首字母为A/B/D的元素并筛选行

过滤DataFrame中姓名列表:保留首字母为A/B/D的元素并移除空行

问题场景

现有如下DataFrame:

ID    Names
3    [Ally, Ben, Cris]
5    [Bruno, Coleen, Flyn]
2    [Dave, Bob]
7    [Rob, Ally, Bob]
11   [Jill, Tom, Sal]

需求说明:

  • 对Names列的姓名列表进行过滤,仅保留首字母为A、B或D的姓名
  • 移除过滤后Names列为空列表的行

最终期望输出:

ID    Names
3    [Ally, Ben]
5    [Bruno]
2    [Dave, Bob]
7    [Ally, Bob]

可复现输入代码:

import pandas as pd

df = pd.DataFrame({'ID': [3, 5, 2, 7, 11],
                   'Names': [['Ally', 'Ben', 'Cris'],
                             ['Bruno', 'Coleen', 'Flyn'],
                             ['Dave', 'Bob'],
                             ['Rob', 'Ally', 'Bob'],
                             ['Jill', 'Tom', 'Sal']]
                  })

解决方法

通过apply方法对列表元素进行过滤,再筛选非空行即可实现需求:

代码实现

# 定义过滤逻辑:保留首字母为A/B/D的姓名
def filter_names(names_list):
    allowed_initials = {'A', 'B', 'D'}
    return [name for name in names_list if name[0] in allowed_initials]

# 对Names列应用过滤规则
df['Names'] = df['Names'].apply(filter_names)

# 过滤掉过滤后为空列表的行,重置索引
df = df[df['Names'].str.len() > 0].reset_index(drop=True)

# 输出结果
print(df)

运行结果

ID         Names
0   3    [Ally, Ben]
1   5       [Bruno]
2   2    [Dave, Bob]
3   7    [Ally, Bob]

补充说明

如果需要兼容姓名首字母小写的情况,可修改过滤条件为name[0].upper() in allowed_initials,确保大小写不影响过滤结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:31:02