将二进制转换为分类



我有一个格式为

的数据框架
black  orange   yellow    green
1    0      1         0        1
2    0      0         0        1
3    1      0         0        0

我想创建另一个列,将告诉哪些颜色存在,所以最终输出应该是:

black  orange   yellow    green  colours
1    0      1         0        1    orange and green
2    0      0         0        1       green 
3    1      0         0        0       black

提前感谢。附注:忘了补充,还有更多的列——更多的颜色。

使用DataFrame.dot作为列名,然后删除5的最后值:

df['colours'] = df.astype(bool).dot(df.columns.astype(str) + ' and ').str[:-5] 
print (df)
black  orange  yellow  green           colours
1      0       1       0      1  orange and green
2      0       0       0      1             green
3      1       0       0      0             black

或者使用apply:

>>> df['colours'] = df.apply(lambda x: ' and '.join(x[x == 1].index), axis=1)
>>> df
black  orange  yellow  green           colours
1      0       1       0      1  orange and green
2      0       0       0      1             green
3      1       0       0      0             black
>>> 

最新更新