Pandas将0/1数据框条目映射到列名

时间:2015-08-20 18:42:37

标签: python pandas

我在pandas中有一个数据框,其条目为0或1.我想将此减少为单个字符串列表,这些字符串是串联列名称的结果,只要有1。

对于玩具示例,假设我的数据框是

   V1 V2 V3
   0  1  1
   1  1  0
   0  0  0

我希望最终结果看起来像

"V2,V3"
"V1,V2"
""

我最初尝试使用

的内容
my_df.apply(lambda x: colnames[x])

认为它的行为类似于numpy如何处理布尔索引。但是,没有实现我想做的事情。我该怎样做才能做到最好?

1 个答案:

答案 0 :(得分:1)

将df的dtype转换为bool,然后调用apply并使用布尔掩码来掩盖列,您需要将参数axis=1传递给apply列掩码逐行:

In [47]:
df.astype(bool).apply(lambda x: ','.join(df.columns[x]), axis=1)

Out[47]:
0    V2,V3
1    V1,V2
2         
dtype: object

您的代码my_df.apply(lambda x: colnames[x])无法正常工作,因为首先在未指定apply的情况下调用df上的axis将依次调用每列上的lambda,其次是{{ 1}}将此解释为索引值而不是布尔标志。