我想分配一个column('Name'),其中value是value为1时的一组列名称(A / B / C)。我想要的结果如下:
df:
A B C Name
1 1 0 1 {A,B}
2 0 1 0 {B}
3 1 1 1 {A,B,C}
注意:A / B / C列的值为1或0。
答案 0 :(得分:2)
使用DataFrame.apply
进行过滤并转换为set
s:
df['Name'] = df.apply(lambda x: set(x.index[x == 1]), axis=1)
或具有设定理解力的列表:
df['Name'] = [set([k for k, v in x.items() if v]) for x in df.to_dict('r')]
或使用DataFrame.dot
的点积,Series.str.rstrip
,Series.str.split
并转换为set
s:
df['Name'] = df.dot(df.columns + ',').str.rstrip(',').str.split(',').apply(set)
print (df)
A B C Name
1 1 0 1 {A, C}
2 0 1 0 {B}
3 1 1 1 {A, C, B}