python - 分组数据和搜索值集

标签 python pandas dataframe group-by pandas-groupby

这是数据框:

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 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

谢谢!

关于python - 分组数据和搜索值集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46553916/

相关文章:

python - 按照列表中值的顺序过滤排序 NumPy 数组的行

python - 如何使用 sqlalchemy 或 SQLObject 建立需要 CA-CERT 的 mysql 连接

python - Pandas:解析和更新带有空值的列中的字符串

python - 为什么有一个以列表作为值的索引可以,但不能用于列?

python - 将 pandas 列中的字典转换为字典值

Python 将一列拆分为多列并将拆分的列重新附加到原始数据帧中

python - 在嵌套列表上使用删除

python - Pandas - 如何选择其中包含特定值的行

python - 如何将索引 1 处特定列的值分配给新变量

python - 如何在 pandas 中按日期分组并创建与日期关联的时间列