Подсчет элементов в строке в многоколоночном фрейме данных pandas - PullRequest
1 голос
/ 09 июля 2020

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

df_data={'med1':['Prednisolone','Prednisolone','Folic acid','Folic acid','Prednisolone','Enbrel','Prednisolone'],
    'med2': [np.nan, np.nan, 'Folic acid','Folic acid',np.nan,'Methotrexate pill',np.nan],
    'med3':[np.nan, np.nan,'Prednisolone','Prednisolone',np.nan,'Prednisolone',np.nan]}

df_data=pd.DataFrame(df_data)
df_data

    med1            med2        med3
------------------------------------------
0   Prednisolone    NaN         NaN
1   Prednisolone    NaN         NaN
2   Folic acid  Folic acid      Prednisolone
3   Folic acid  Folic acid      Prednisolone
4   Prednisolone    NaN         NaN
5   Enbrel  Methotrexate pill   Prednisolone
6   Prednisolone    NaN         NaN

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

    med1       med2    med3             Prednisolone Folic acid Enbrel  Methotrexate pill
---------------------------------------------------------------------------------
0   Prednisolone        NaN       NaN              1       0       0        0
1   Prednisolone        NaN       NaN              1       0       0        0
2   Folic acid    Folic acid    Prednisolone       1       2       0.       0
3   Folic acid    Folic acid    Prednisolone       1       2       0        0
4   Prednisolone        NaN       NaN              1       0       1        1
5   Enbrel  Methotrexate pill   Prednisolone       1       0       1        1
6   Prednisolone       NaN        NaN              1       0       0        0

Я не знаю, как действовать. Одно горячее кодирование для каждого столбца, а затем сумма? Есть предложения попроще?

1 Ответ

1 голос
/ 09 июля 2020

Мы можем stack + str.get_dummies

s=df_data.stack().str.get_dummies().sum(level=0)
   Enbrel  Folic acid  Methotrexate pill  Prednisolone
0       0           0                  0             1
1       0           0                  0             1
2       0           2                  0             1
3       0           2                  0             1
4       0           0                  0             1
5       1           0                  1             1
6       0           0                  0             1
df=df.join(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...