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

如何在Pandas DataFrame多列中筛选首字符为'd'的行

筛选Pandas DataFrame中指定列首字符均为'd'的行

需要筛选DataFrame中从第2列(columns[1:])起所有列值首字符均为'd'的行,示例DataFrame如下:

import pandas as pd

df = pd.DataFrame({
    'name': ['vamjy', 'tjny', 'xrvwb', 'kuqjlat', 'muagny', 'cuw', 'ekw'],
    'text': ['dadcd', 'abecc', 'dddda', 'ddade', 'eaedd', 'caceb', 'edded'],
    'line': ['eebdd', 'abbcb', 'cbddd', 'dbeac', 'cabbd', 'acaca', 'ebace'],
    'note': ['bdded', 'bbebb', 'adcca', 'decee', 'dbcce', 'eabbc', 'aaacc']
})

原可行但繁琐的写法

当列数较少时,可手动拼接布尔条件:

df[(df['text'].str[0]=='d') & (df['line'].str[0]=='d') & (df['note'].str[0]=='d')]

但列数较多时,这种写法重复冗余,需要更简洁的实现方式。

优化解决方案

方法1:向量化批量处理(推荐,效率更高)

直接对目标列批量提取首字符,生成布尔值矩阵后,按行判断是否全为True:

df[(df.iloc[:, 1:].str[0] == 'd').all(axis=1)]
  • df.iloc[:, 1:]:选取第2列及之后的所有列
  • .str[0] == 'd':对每个列的所有值提取首字符,判断是否等于'd',得到布尔值DataFrame
  • .all(axis=1):检查每行的所有布尔值是否全为True,返回行级的布尔序列,用于筛选行

方法2:逐行应用判断逻辑

使用apply逐行处理目标列,通过all()验证所有列的首字符条件:

df[df.iloc[:, 1:].apply(lambda row: all(str_val[0] == 'd' for str_val in row), axis=1)]

这种方法逻辑直观,但性能略低于向量化操作,适合需要自定义复杂判断逻辑的场景。

原尝试代码报错原因

你之前尝试的df[df[x].str[0] == 'd' for x in df.columns[1:]]无法运行,是因为Pandas的索引器无法直接识别生成器对象,需要将多个布尔序列合并为一个行级的布尔判断结果(如用&连接或all()合并)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:37:45