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

如何使用Python的for循环筛选DataFrame中行内大于0值的列索引

如何使用Python的for循环筛选DataFrame中行内大于0值的列索引

嘿,我来帮你搞定这个需求!首先咱们把步骤理清楚:你需要按指定顺序遍历DataFrame的行(你提到的顺序是先D2,再D2、D3、D4),对每一行找出所有值大于0的列索引,最后把这些索引整理到列表里对吧?

先从初始化你的DataFrame开始,我顺便加了点测试数据(不然全是NaN没法验证逻辑):

import pandas as pd

# 初始化你给出的DataFrame
a = pd.DataFrame(index=['D1','D2','D3','D4'], columns=[x for x in range(0,10)])

# 填充测试数据,方便验证效果
a.loc['D2'] = [0, 2, -1, 5, 0, 3, -2, 0, 4, 1]
a.loc['D3'] = [-3, 0, 0, -5, 6, 0, 7, 0, 0, -1]
a.loc['D4'] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

接下来就是用for循环实现你的需求啦,完全按照你指定的行顺序来:

# 定义要遍历的行顺序(严格按照你说的:D2、D2、D3、D4)
rows_to_check = ['D2', 'D2', 'D3', 'D4']
# 用来存储最终结果的列表
result_list = []

# 开始循环处理每一行
for row_name in rows_to_check:
    # 取出当前行的数据
    current_row = a.loc[row_name]
    # 筛选出该行中值大于0的列,再提取它们的索引转成列表
    positive_column_indices = current_row[current_row > 0].index.tolist()
    # 把当前行的结果加入总列表
    result_list.append(positive_column_indices)

# 打印看看结果
print(result_list)

运行这段代码后,你会得到这样的输出(对应每一行的筛选结果):

[[1, 3, 5, 8, 9], [1, 3, 5, 8, 9], [4, 6], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]

如果你想更清晰地对应每一行的结果(比如知道哪个行名对应哪些列索引),可以用字典来存储,可读性会更好:

result_dict = {}
for row_name in rows_to_check:
    current_row = a.loc[row_name]
    positive_column_indices = current_row[current_row > 0].index.tolist()
    # 这里如果同一个行名出现多次(比如你这里的D2),会覆盖之前的结果;要是想保留多次结果,可以改成列表追加的形式
    result_dict[row_name] = positive_column_indices

print(result_dict)

这个版本的输出会是:

{'D2': [1, 3, 5, 8, 9], 'D3': [4, 6], 'D4': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]}

如果之后你需要遍历所有行而不是指定顺序,只需要把rows_to_check改成a.index.tolist()就可以啦。

备注:内容来源于stack exchange,提问作者Kang H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 14:24:29