如何使用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.
相关产品推荐
相关产品推荐

