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

Pandas DataFrame按阈值筛选指定索引行列名及报错求助

解决DataFrame按指定行筛选列名的问题

问题描述

你需要为索引[0,43,46]的每一行分别生成列名列表,要求列表中的列在对应行的数值大于指定阈值(比如1000)。你的DataFrame示例如下:

indexasset.assetStateId.10asset.assetStateId.100asset.assetStateId.101
0.01057.00.00.0
43.0380.01441.00.0
46.00.00.01441.0

你尝试了以下代码但报错:

lista_colunas = list(result_1.columns.values)
lista_assets = []
for asset in lista_colunas:
    if result_1.loc[result_1[asset]>1000]:
        lista_assets += [asset]

报错信息:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

报错原因

你的代码逻辑有两个核心问题:

  1. 遍历所有列时,你是判断整个列中是否存在大于1000的值,而不是针对[0,43,46]这三行分别做判断;
  2. result_1.loc[result_1[asset]>1000]返回的是一个包含符合条件行的DataFrame,直接放在if条件里会导致歧义——Python无法直接判断一个DataFrame的“真假”,所以抛出了这个错误。

修复后的代码

我们需要针对每个目标索引的行,单独筛选出该行中值大于阈值的列名,以下是两种实用的实现方式:

方式一:循环遍历目标索引(清晰易懂)

# 指定目标索引和阈值
target_indices = [0, 43, 46]
threshold = 1000

# 存储结果的列表
result_lists = []

for idx in target_indices:
    # 获取当前索引对应的行数据
    current_row = result_1.loc[idx]
    # 筛选该行中值大于阈值的列名,转成列表
    cols_above = current_row[current_row > threshold].index.tolist()
    result_lists.append(cols_above)

# 输出结果
print(result_lists)

方式二:列表推导式(简洁高效)

target_indices = [0, 43, 46]
threshold = 1000

result_lists = [
    result_1.loc[idx][result_1.loc[idx] > threshold].index.tolist()
    for idx in target_indices
]

print(result_lists)

结果说明

运行上述代码后,你会得到完全符合需求的结果:三个列表分别对应索引0、43、46的行,每个列表包含该行中数值大于1000的列名:

[
    ['asset.assetStateId.10'],
    ['asset.assetStateId.100'],
    ['asset.assetStateId.101']
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:46:11