Есть ли способ агрегирования строк без суммирования их результатов? - PullRequest
0 голосов
/ 09 мая 2019

Мой DataFrame состоит из 2 столбцов.Один с идентификатором пациента и один с проблемой пациента.Мне нужно создать DataFrame, в котором все проблемы пациента находятся в одном ряду с соответствующим идентификатором пациента.На данный момент, если у пациента есть проблема, этот фрейм данных создает уникальную строку.

PAT_MRN_ID  Problem                      
9641956     Headache
9641956     Stomach_ache  
8227510     Headache 
8165474     Chicken_pox
7860000     Stomach_ache

Приведенный выше пример должен выглядеть так:пример.Я пытался использовать циклы и агрегирование, но, к сожалению, моих базовых навыков программирования было недостаточно.

Ответы [ 3 ]

2 голосов
/ 09 мая 2019

Использовать pd.get_dummies.

import pandas as pd
df = pd.DataFrame({"PAT_MRN_ID": [9641956, 9641956, 8227510, 8165474, 7860000], "Problem": ["Head", "Stomach", "Head", "Pox", "Stomach"]})
pd.get_dummies(df,columns=["Problem"]).groupby(df.index).sum()
                  Problem_Head  Problem_Pox  Problem_Stomach
PAT_MRN_ID                                            
7860000                0            0                1
8165474                0            1                0
8227510                1            0                0
9641956                1            0                1
1 голос
/ 09 мая 2019

Используйте get_dummies с DataFrame.set_index, макс. Для индекса и DataFrame.reset_index:

df1 = (pd.get_dummies(df.set_index('PAT_MRN_ID')['Problem'], 
                    prefix='', prefix_sep='')
         .max(axis=0, level=0)
         .reset_index())
print (df)

PAT_MRN_ID Chicken_pox  Headache  Stomach_ache                                  
9641956               0         1             1
8227510               0         1             0
8165474               1         0             0
7860000               0         0             1
0 голосов
/ 09 мая 2019

Сначала получите манекены для 'Задачи', а затем группу

import pandas as pd
df = pd.DataFrame({ "PAT_MRN_ID" : [9641956,9641956,8227510,8165474,7860000],
                    "Problem" : ["Headache","Stomach-Ache","Headache","Chicken-Pox","Stomach-Ache"]
                 })

    PAT_MRN_ID  Problem
0   9641956     Headache
1   9641956     Stomach-Ache
2   8227510     Headache
3   8165474     Chicken-Pox
4   7860000     Stomach-Ache


df=pd.get_dummies(df, columns=['Problem'],prefix='',prefix_sep='')
     .groupby(['PAT_MRN_ID'], as_index=False)
     .max()


    PAT_MRN_ID  Chicken-Pox Headache    Stomach-Ache
0   7860000     0           0           1
1   8165474     1           0           0
2   8227510     0           1           0
3   9641956     0           1           1

...