Групповое накопление в pandas, затем обновление с использованием numpy на основе заданного условия c - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть фрейм данных, как показано ниже.

B_ID   No_Show   Session  slot_num   Patient_count
    1     0.4       S1        1          1
    2     0.3       S1        2          1
    3     0.8       S1        3          1
    4     0.3       S1        3          2
    5     0.6       S1        4          1
    6     0.8       S1        5          1
    7     0.9       S1        5          2
    8     0.4       S1        5          3
    9     0.6       S1        5          4
    12    0.9       S2        1          1
    13    0.5       S2        1          2
    14    0.3       S2        2          1
    15    0.7       S2        3          1
    20    0.7       S2        4          1
    16    0.6       S2        5          1
    17    0.8       S2        5          2
    19    0.3       S2        5          3

Из приведенного выше я хотел бы найти накопительный No_show по сеансу

df['Cum_No_show'] = df.groupby(['Session'])['No_Show'].cumsum()

Нет, мы получаем

B_ID   No_Show   Session  slot_num   Patient_count  Cumulative_No_show
    1     0.4       S1        1          1          0.4
    2     0.3       S1        2          1          0.7
    3     0.8       S1        3          1          1.5
    4     0.3       S1        3          2          1.8
    5     0.6       S1        4          1          2.4
    6     0.8       S1        5          1          3.2
    7     0.9       S1        5          2          4.1
    8     0.4       S1        5          3          4.5
    9     0.6       S1        5          4          5.1
    12    0.9       S2        1          1          0.9
    13    0.5       S2        1          2          1.4
    14    0.3       S2        2          1          1.7
    15    0.7       S2        3          1          2.4
    20    0.7       S2        4          1          3.1
    16    0.6       S2        5          1          3.7
    17    0.8       S2        5          2          4.5
    19    0.3       S2        5          3          4.8

Исходя из вышеизложенного, я хотел бы создать новый столбец с именем, приведенным ниже

U_slot_num = Updated slot number

U_No_show = Updated cumulative no show

Всякий раз, когда кумулятивное отсутствие показа> 0,6, изменяет следующий slot_num на тот же, что и текущий, и увеличивает количество пациентов на единицу и обновляет U_No_show как вычитание 1, как показано в ожидаемом результате.

Ожидаемый результат:

No_Show  Session slot_num Patient_count Cum_No_show U_slot_num  U_No_show
 0.4       S1        1          1          0.4         1         0.4
 0.3       S1        2          1          0.7         2         0.7
 0.8       S1        3          1          1.5         2         0.5
 0.3       S1        3          2          1.8         3         0.8      
 0.6       S1        4          1          2.4         3         0.4
 0.8       S1        5          1          3.2         4         1.2
 0.9       S1        5          2          4.1         4         0.2
 0.4       S1        5          3          4.5         5         0.6
 0.6       S1        5          4          5.1         6         1.2
 0.9       S2        1          1          0.9         1         0.9
 0.5       S2        1          2          1.4         1         0.4
 0.3       S2        2          1          1.7         2         0.7
 0.7       S2        3          1          2.4         2         0.4
 0.7       S2        4          1          3.1         3         1.1
 0.6       S2        5          1          3.7         3         0.7
 0.8       S2        5          2          4.5         3         0.5
 0.3       S2        5          3          4.8         4         0.8
...