Используя group by - создайте новый coulmn на основе условия в другом столбце в pandas - PullRequest
0 голосов
/ 22 апреля 2020

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

B_ID    Session    no_show   cumulative_no_show   u_no_show
1       s1         0.4       0.4                  0.4
2       s1         0.6       1.0                  1.0
3       s1         0.2       1.2                  0.2
4       s1         0.1       1.3                  0.3
5       s1         0.4       1.7                  0.7
6       s1         0.2       1.9                  0.9
7       s1         0.3       2.2                  0.2
10      s2         0.3       0.3                  0.3
11      s2         0.4       0.7                  0.7
12      s2         0.3       1.0                  1.0
13      s2         0.6       1.6                  0.6
14      s2         0.2       1.8                  1.8
15      s2         0.5       2.3                  0.3

Исходя из вышеизложенного, я хотел бы оценить новый столбец slot_num, зависящий от u_no_show, как описано ниже. если u_no_show увеличивает, увеличить slot_num еще на один, оставьте его таким же.

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

B_ID    Session    no_show   cumulative_no_show   u_no_show    slot_num
1       s1         0.4       0.4                  0.4          1
2       s1         0.6       1.0                  1.0          2
3       s1         0.2       1.2                  0.2          2 
4       s1         0.1       1.3                  0.3          3
5       s1         0.4       1.7                  0.7          4
6       s1         0.2       1.9                  0.9          5
7       s1         0.3       2.2                  0.2          5
10      s2         0.3       0.3                  0.3          1
11      s2         0.4       0.7                  0.7          2
12      s2         0.3       1.0                  1.0          3
13      s2         0.6       1.6                  0.6          3
14      s2         0.2       1.8                  0.8          4
15      s2         0.5       2.3                  0.3          4

1 Ответ

1 голос
/ 22 апреля 2020

Я бы сделал с двумя groupby:

s = df.groupby('Session').u_no_show.diff().gt(0).astype(int)
df['slot_num'] = s.groupby(df.Session).cumsum().add(1)

Вывод:

    B_ID Session  no_show  cumulative_no_show  u_no_show  slot_num
0      1      s1      0.4                 0.4        0.4         1
1      2      s1      0.6                 1.0        1.0         2
2      3      s1      0.2                 1.2        0.2         2
3      4      s1      0.1                 1.3        0.3         3
4      5      s1      0.4                 1.7        0.7         4
5      6      s1      0.2                 1.9        0.9         5
6      7      s1      0.3                 2.2        0.2         5
7     10      s2      0.3                 0.3        0.3         1
8     11      s2      0.4                 0.7        0.7         2
9     12      s2      0.3                 1.0        1.0         3
10    13      s2      0.6                 1.6        0.6         3
11    14      s2      0.2                 1.8        1.8         4
12    15      s2      0.5                 2.3        0.3         4
...