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

Pandas如何提取指定行中值大于阈值的列名并返回列表

实现方案

直接通过pandas原生的布尔索引即可实现,无需编写复杂遍历逻辑,性能和可读性都更好。

步骤1:构造测试数据(和你给出的示例结构一致)

import pandas as pd

df = pd.DataFrame(
    data=[
        [2, 1, 3, 4],
        [1, 3, 5, 4],
        [3, 2, 6, 3],
        [2, 1, 2, 2]
    ],
    index=["AB", "BC", "CD", "DE"],
    columns=["A", "B", "C", "D"]
)

步骤2:核心功能代码

可以直接封装成函数复用:

def get_match_columns(df, target_index):
    # 取出目标行,筛选值大于2的列,转成列表返回
    return df.columns[df.loc[target_index] > 2].tolist()

效果验证

对应你给出的示例场景,调用结果完全符合预期:

  • 传入索引AB:执行get_match_columns(df, "AB"),返回['C', 'D']
  • 传入索引BC:执行get_match_columns(df, "BC"),返回['B', 'C', 'D']
  • 其余索引测试:传入CD返回['A', 'C', 'D'],传入DE返回空列表[],均满足取值大于2的筛选规则

补充说明

如果你的数据中存在空值,可以在判断前先填充空值避免报错,修改后的判断逻辑如下:

return df.columns[df.loc[target_index].fillna(float("-inf")) > 2].tolist()

实现逻辑解释:df.loc[target_index]会取出对应索引的整行数据(结构为Series,索引是原DataFrame的列名),>2的判断会生成等长的布尔序列,值为True的位置就是符合筛选条件的列,用这个布尔序列切片原列名集合,最后转成列表即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 00:57:55