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
相关产品推荐
相关产品推荐

