首页 > 解决方案 > 如果列名包含 1,则对列进行变异

问题描述

我想改变一个列 h,如果它包含 1,则它包含相应的列名 [A,B,C,D]

import pandas as pd
dfz = pd.DataFrame({'A' : [1,0,0,1,0,0],
                    'B' : [1,0,0,1,0,1],
                    'C' : [1,0,0,1,3,1],
                    'D' : [1,0,0,1,0,0]})

dfz['h'] = dfz.loc[:, 'A':'D'].replace(1,pd.Series(dfz.columns,dfz.columns))

预期产出

在此处输入图像描述

标签: pythonpandas

解决方案


DataFrame.dot与过滤列和比较值一起使用1,最后Series.replace与空格一起使用:

#filtered columns
dfz['h'] = dfz.loc[:, 'A':'D'].eq(1).dot(dfz.loc[:, 'A':'D'].columns).replace('', '0')

#filtered by list
cols = ['A','B','C','D']
dfz['h'] = dfz[cols].eq(1).dot(pd.Index(cols)).replace('', '0')

print (dfz)
   A  B  C  D     h
0  1  1  1  1  ABCD
1  0  0  0  0     0
2  0  0  0  0     0
3  1  1  1  1  ABCD
4  0  0  3  0     0
5  0  1  1  0    BC

推荐阅读