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

如何通过部分匹配列名实现Pandas DataFrame的条件行过滤?

用正则匹配列名实现Pandas DataFrame条件过滤

没问题,这事儿很好解决!核心思路就是先通过正则找到你需要的目标列,再用它来完成行过滤操作。我给你一步步拆解:

步骤1:用正则匹配目标列名

Pandas的filter()方法支持regex参数,专门用来按正则规则匹配列名。比如你要匹配以WinningPo开头的列(对应你需求里的WinningPo.*),可以这么写:

# 匹配所有以WinningPo开头的列
matched_columns = dataframe.filter(regex=r'^WinningPo.*').columns

这里的^是正则里的「行首锚点」,能确保只匹配开头是WinningPo的列,避免误匹配到中间包含这段字符的其他列。如果确定只有一个符合条件的列(比如你的WinningPoints),直接取第一个元素就能拿到完整列名:

target_col = matched_columns[0]

步骤2:用匹配到的列执行过滤

拿到动态匹配的列名后,就可以像你之前那样写过滤逻辑了,只是把硬编码的列名换成我们拿到的target_col:

# 注意:如果WinningPoints是数值类型,不要加引号!只有字符串类型才需要>'40'
filtered_data = dataframe[dataframe[target_col] > 40]

完整可运行示例

我给你写了个模拟场景的代码,方便你直接测试:

import pandas as pd

# 模拟你的DataFrame结构
df = pd.DataFrame({
    'WinningPoints': [38, 42, 55, 39],
    'PlayerName': ['Alice', 'Bob', 'Charlie', 'David'],
    'Team': ['Red', 'Blue', 'Red', 'Blue']
})

# 1. 正则匹配目标列名
matched_cols = df.filter(regex=r'^WinningPo.*').columns
target_col = matched_cols[0]

# 2. 执行条件过滤
filtered_df = df[df[target_col] > 40]

print(filtered_df)

运行后会输出符合条件的行,且保留所有列:

WinningPoints PlayerName  Team
1             42        Bob  Blue
2             55     Charlie  Red

小提醒

  • 注意列的数据类型:如果WinningPoints是数值类型(int/float),一定要用>40(不带引号);如果是字符串类型才用>'40',否则字符串比较会出现逻辑错误(比如'5' > '40'会返回True,因为字符串是按首字符ASCII码对比的)。
  • 如果有多个符合正则的列,你可能需要额外判断(比如取特定索引的列,或者循环处理),但按你的需求,用^WinningPo.*应该只会匹配到WinningPoints这一列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 20:19:08