【问题标题】:Pandas map 0/1 data frame entries to column namesPandas 将 0/1 数据框条目映射到列名
【发布时间】:2015-08-20 18:42:37
【问题描述】:

我在 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 处理布尔索引的方式。但是,并没有达到我想要做的。我应该如何最好地做到这一点?

【问题讨论】:

    标签: python pandas


    【解决方案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]) 将不起作用,因为首先在没有指定axis 的情况下在df 上调用apply 时将依次调用每列上的lambda,其次1/0 会将其解释为索引值而不是布尔标志。

    【讨论】:

    • 或者你可以df.apply(lambda x: '"%s"'%(','.join(df.columns[x==1])), axis=1)
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2015-07-24
    • 2021-08-21
    • 1970-01-01
    • 2013-06-27
    相关资源
    最近更新 更多