如何提取DataFrame每行中值为1的列名并生成对应列表
实现方案
基础实现(适合小数据量场景)
你可以直接通过pandas的行级apply操作实现需求,完整代码如下:
- 首先构造样例DataFrame(如果你的数据已经读取完成可以跳过这一步)
import pandas as pd df = pd.DataFrame([ [0,0,1,0,0,0,0,0], [0,1,1,0,0,0,0,0], [0,0,1,1,1,1,1,1], [0,0,1,0,1,0,0,0] ], columns=['P00','P1','P10','P11','P12','P13','P14','P15'])
- 核心处理逻辑
# 逐行筛选值为1的列,提取列名转为列表 result = df.apply(lambda row: row[row == 1].index.tolist(), axis=1)
- 输出验证
for item in result: print(item)
运行后输出和你要求的结果完全一致:
['P10'] ['P1', 'P10'] ['P10', 'P11', 'P12', 'P13', 'P14', 'P15'] ['P10', 'P12']
优化实现(适合大数据量场景)
如果你的DataFrame行数非常多,apply的行遍历效率较低,可以使用向量化操作提速:
result = df.dot(df.columns + ',').str.rstrip(',').str.split(',')
该方法通过矩阵点积直接完成列名拼接,效率比apply高1~2个数量级。
内容的提问来源于stack exchange,提问作者rajat
相关产品推荐
相关产品推荐

