如何分配一个新的列,其中value是一组基于熊猫的多个列的列名?

时间:2019-05-09 07:38:31

标签: pandas

我想分配一个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。

1 个答案:

答案 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.rstripSeries.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}