我目前正在尝试使用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循环非常慢,并且我确信有一种更好的方法无法解决。你能帮我个忙吗?
答案 0 :(得分:3)
在只有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
如果可能的话,再加上一些整数,并且有必要进行更大的测试,例如DataFrame.gt
的0
使用:
df['new'] = df.gt(0).dot(df.columns + ',').str.rstrip(',')