pandas dataframe-获取列名称的列表,其中单元格具有特定值

时间:2020-02-14 07:05:20

标签: python pandas

我目前正在尝试使用Pandas DataFrames。我构造了一个看起来像这样的矩阵:

    x   y   z
A   1   0   1
B   1   1   0
C   1   0   0
D   0   1   0

我想要的是这个(对于每个单元格= 1,将列名附加到每行的结果中):

A   x,z
B   x,y
C   x
D   y

我当前的最佳解决方案是遍历for循环中的列,获取所有值> 0的列,提取列名,然后将其传递给我的下一个函数。但是,由于我有很多列(> 1000),因此for循环非常慢,并且我确信有一种更好的方法无法解决。你能帮我个忙吗?

1 个答案:

答案 0 :(得分:3)

在只有10值的情况下使用,将矩阵乘法DataFrame.dot与列名一起使用,最后用Series.str.rstrip除去分隔符:

df['new'] = df.dot(df.columns + ',').str.rstrip(',')
print (df)
   x  y  z  new
A  1  0  1  x,z
B  1  1  0  x,y
C  1  0  0    x
D  0  1  0    y

如果可能的话,再加上一些整数,并且有必要进行更大的测试,例如DataFrame.gt0使用:

df['new'] = df.gt(0).dot(df.columns + ',').str.rstrip(',')