我有这个数据框:
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
我将首先根据drug_id对数据进行分组,并在疾病列中搜索HD,MS和FN的可用性。然后填写第二个数据框,如下所示:
df2:
drug_id HD MS FN
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
这是我的分组代码。
df1.groupby('drug_id', sort=False).isin('HD')
但我不知道如果F2['HD']
可用于'HD'
drug_id
,我可以为每个drug_id分配1 df1
。
谢谢。
答案 0 :(得分:2)
选项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
df.groupby('drug_id').illness.value_counts()\
.unstack()[['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
选项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
感谢Scott Boston的改进!
答案 1 :(得分: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