【问题标题】:extract attributes from pandas columns that satisfy a condition从满足条件的 pandas 列中提取属性
【发布时间】:2020-04-17 01:28:42
【问题描述】:

假设我有一个包含 3 个不同变量的频率表:M1、M2 和 M3,在不同的实例中:P1、... P4:

tupl = [(0.7, 0.2, 0.1), (0,0,1), (0.2,0.6,0.2), (0.6,0.4,0)]

df_test = pd.DataFrame(tupl, columns = ["M1", "M2", "M3"], index =["P1", "P2", "P3", "P4"])

现在对于每一行,我希望能够将每个变量的出现提取为字符串,这样最终的输出将类似于:

output = pd.DataFrame([("M1+M2+M3"), ("M3"), ("M1+M2+M3"), ("M1+M2")], columns = ["label"], index = ["P1", "P2", "P3", "P4"])

我考虑过使用类似 np.where(df_test!=0) 的东西,但是如何将列名作为字符串粘贴到输出中?

【问题讨论】:

    标签: python pandas subset


    【解决方案1】:

    您可以使用 np.where 用标签填充单元格,然后将它们连接为字符串。

    (
        df_test.gt(0).apply(lambda x: np.where(x, x.name, None))
        .apply(lambda x: '+'.join(x.dropna()), axis=1)
        .to_frame('label')
    )
    
    
        label
    P1  M1+M2+M3
    P2  M3
    P3  M1+M2+M3
    P4  M1+M2
    

    【讨论】:

      【解决方案2】:

      我是这样做的,希望对你有帮助:

      import pandas as pd
      df_test = pd.DataFrame(tupl, columns = ["M1", "M2", "M3"], index =["P1", "P2", "P3", "P4"])
      new=[]
      for row in df_test.itertuples():
       aux=[]
       if row.M1!=0: aux.append('M1')
       if row.M2!=0: aux.append('M2')
       if row.M3!=0: aux.append('M3')
      output = pd.DataFrame(new, columns = ["label"], index = ["P1", "P2", "P3", "P4"])
      

      【讨论】:

      • @Allen 做了一个更 Pythonic(panonic?)的方法来解决它!很高兴学习:)
      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2018-03-02
      • 1970-01-01
      • 2015-09-29
      相关资源
      最近更新 更多