我在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如何处理布尔索引。但是,没有实现我想做的事情。我该怎样做才能做到最好?
答案 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}}将此解释为索引值而不是布尔标志。