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

如何高效遍历大规模pandas数值DataFrame行返回满足阈值的列名字典

需求说明

对存储数值的pandas DataFrame,逐行识别单元格值满足阈值(本题设定阈值为0.05)的列名,最终输出以行索引为键、匹配列名组成的列表为值的字典。方案需适配10000行、700列的大规模数据规模,避免低效的逐单元格遍历。

最小可复现示例(MWE)

import pandas as pd
import numpy as np

np.random.seed(0)

df = pd.DataFrame(
    np.random.randint(0,10,size=(8, 7))/100, 
    columns=list('ABCDEFG'), 
    index = ['Dog', "Cat", 'Pig', 'Horse', 'Fish', 'Chicken', 'Squid', 'Cheetah']
)

示例运行生成的DataFrame

A     B     C     D     E     F     G
----  ----  ----  ----  ----  ----  ----
0.05  0     0.03  0.03  0.07  0.09  0.03
0.05  0.02  0.04  0.07  0.06  0.08  0.08
0.01  0.06  0.07  0.07  0.08  0.01  0.05
0.09  0.08  0.09  0.04  0.03  0     0.03
0.05  0     0.02  0.03  0.08  0.01  0.03
0.03  0.03  0.07  0     0.01  0.09  0.09
0     0.04  0.07  0.03  0.02  0.07  0.02
0     0     0.04  0.05  0.05  0.06  0.08

期望输出格式

{
   'Dog': ['A', 'E', 'F'], 
    "Cat": ['A', 'D', 'E', 'F', 'G'], 
    'Pig': ['B', 'C', 'D', 'E', 'G'], 
    'Horse': ['A', "B", 'C'], 
    'Fish': ['A', 'E'], 
    'Chicken': ['C', 'F', 'G'], 
    'Squid': ['C', 'F'], 
    'Cheetah': ['D', 'E', 'F', 'G']
}

实现代码

针对大规模数据的性能需求,采用向量化布尔掩码的方式减少循环开销:

  • 第一步:生成与原DataFrame同形状的布尔筛选表,值满足>=0.05的位置保留原值,不满足的位置替换为缺失值
  • 第二步:逐行提取非缺失值对应的列名,组装为列表
  • 第三步:将最终序列转换为字典格式
threshold = 0.05
result = df[df >= threshold].apply(
    lambda row: row.dropna().index.tolist(),
    axis=1
).to_dict()

补充说明:该实现逻辑的列名顺序与原DataFrame的列顺序保持一致,输出结果和示例期望格式完全匹配;在万行级规模下的运行效率远高于逐行逐单元格遍历的写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 04:06:09