按一列分组并显示另一列中特定值的可用性

2024-04-24 23:51:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个数据帧:

df1:

  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

我将首先根据药品编号分组,然后在疾病栏中搜索HD、MS和FN的可用性。然后填写第二个数据框,如下所示:

^{pr2}$

这是我的分组代码。在

df1.groupby('drug_id', sort=False).isin('HD')

但是我不知道如何为每个药物的F2['HD']分配1,如果'HD'df1中对drug_id可用。在

谢谢。在


Tags: 数据idcd编号msfn疾病df1
2条回答
df.groupby(['drug_id','illness']).illness.count().unstack(-1).reindex_axis(['HD', 'MS', 'FN'],axis=1).ge(0).astype(int)
Out[276]: 
illness    HD  MS  FN
drug_id              
lexapro.1   1   1   0
lexapro.2   0   1   0
lexapro.3   0   0   0
lexapro.4   1   0   0
lexapro.5   0   0   1

选项1
crosstab

pd.crosstab(df.drug_id, df.illness)[['HD', 'MS', 'FN']].ge(1).astype(int)

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

选项2
groupby+value_counts+unstack

^{pr2}$

选项3
get_dummies+sum

df.set_index('drug_id').illness.str.get_dummies()\
          .sum(level=0)[['HD', 'MS', 'FN']].ge(1).astype(int)

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

感谢斯科特·波士顿的进步!在

相关问题 更多 >