如何在Pandas中根据DataFrame值为1的列生成列名列表新列?
解决方案
可以通过pandas.DataFrame.apply逐行处理数据,筛选出每行中值为1的列名,再根据数量返回对应格式的结果:
import pandas as pd import numpy as np # 初始化原始DataFrame df = pd.DataFrame({'type_a': [1,0,0,0,0,1,0,0,0,1], 'type_b': [0,1,0,0,0,0,0,0,1,1], 'type_c': [0,0,1,1,1,1,0,0,0,0], 'type_d': [1,0,0,0,0,1,1,0,1,0], }) # 生成目标列'type' df['type'] = df.apply( lambda row: # 多列值为1时返回列名列表 list(row[row == 1].index) if len(row[row == 1]) > 1 # 单列为1时返回列名字符串 else row[row == 1].index[0] if len(row[row == 1]) == 1 # 无列值为1时返回nan else np.nan, axis=1 # 指定按行处理 )
运行后得到的df与期望输出完全一致:
- 单行多列值为1时,返回列名组成的列表(如第一行
['type_a','type_d']) - 单行仅一列值为1时,返回单个列名字符串(如第二行
type_b) - 无列值为1时,返回
np.nan(如第七行)
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

