首页 > 解决方案 > pandas dataframe - 获取单元格具有特定值的列名列表

问题描述

我目前正在尝试使用 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 循环非常慢,我确信有更好的方法我无法弄清楚。你能帮帮我吗?

标签: pythonpandas

解决方案


如果只有1并且0值使用矩阵乘法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

如果可能的话,还有一些其他整数,并且有必要0通过DataFrame.gt使用来测试更大的类似:

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

推荐阅读