这是数据框:
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 或 Sweat 或 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
最佳答案
这可以通过 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 replace
ment 和 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
谢谢!
关于python - 分组数据和搜索值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553916/