【问题标题】:Grouping data and searching for sets of values分组数据和搜索值集
【发布时间】:2017-10-03 21:45:22
【问题描述】:

这是数据框:

drug_id      illness 
    lexapro.1     HD
    lexapro.1     MS
    lexapro.2     HDED
    lexapro.2     MS
    lexapro.2     MS
    lexapro.3     CD
    lexapro.3     Sweat
    lexapro.4     HD
    lexapro.5     WD
    lexapro.5     FN

首先,我将根据 drug_id 对数据进行分组,并在疾病列中搜索 HD、Sweat、WD、CD、MS 和 FN 的可用性。那么如果疾病值为“HD or Sweat or WD”,df2 中的“HD”列将得到 1,如果 F1 中的疾病值为 MS 或 HDED,则 df2 中的 MS 列将得到 1,如果 FN 中的疾病为1,则df2中的FN会收到1。所以df2是这样的:

df2:
drug_id       HD      MS    FN
lexapro.1      1      1      0
lexapro.2      0      1      0   
lexapro.3      1      0      0
lexapro.4      1      0      0
lexapro.5      1      0      1

我已经问过一个类似的问题。但是在那个问题中,在疾病列中搜索值时没有“或”。 grouping data in a data-frame, checking for availability of specific values, and updating the second data frame

【问题讨论】:

    标签: python pandas dataframe group-by pandas-groupby


    【解决方案1】:

    另一种实现方式

    pd.crosstab(df['drug_id'],df['illness']).rename(columns={'Sweat' : 'HD', 'WD': 'HD', 'HDED' : 'MS'}).groupby(lambda x : x,axis=1).sum().gt(0).astype(int).drop('CD',1)
    Out[290]: 
               FN  HD  MS
    drug_id              
    lexapro.1   0   1   1
    lexapro.2   0   0   1
    lexapro.3   0   1   0
    lexapro.4   0   1   0
    lexapro.5   1   1   0
    

    【讨论】:

      【解决方案2】:

      这可以通过replace 调用来完成:

      repl_dict = {'Sweat' : 'HD', 'WD': 'HD', 'HDED' : 'MS'}
      df.illness = df.illness.replace(repl_dict)
      

      现在,使用您之前答案中的任何选项。

      df.set_index('drug_id').illness.str.get_dummies()\
               .sum(level=0).ge(1).astype(int).drop('CD', 1)
      
                 FN  HD  MS
      drug_id              
      lexapro.1   0   1   1
      lexapro.2   0   0   1
      lexapro.3   0   1   0
      lexapro.4   0   1   0
      lexapro.5   1   1   0
      

      piRSquared shortened replacement 和 groupby 到一行:

      df.illness.replace(repl_dict).groupby(df.drug_id)\
               .apply('|'.join).str.get_dummies().drop('CD', 1)
      
                 FN  HD  MS
      drug_id              
      lexapro.1   0   1   1
      lexapro.2   0   0   1
      lexapro.3   0   1   0
      lexapro.4   0   1   0
      lexapro.5   1   1   0
      

      谢谢!

      【讨论】:

      • df.illness.replace(repl_dict).groupby(df.drug_id).apply('|'.join).str.get_dummies().drop('CD', 1)
      猜你喜欢
      • 1970-01-01
      • 2019-03-11
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      相关资源
      最近更新 更多