pandas - 使用 group by - 根据 pandas 中另一列的条件创建一个新的列
问题描述
我有一个如下所示的数据框
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
解决方案
我会做两个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
推荐阅读
- python - 将新的数据框列添加到熊猫中的同一数据框
- python - Telegram 获取聊天消息/帖子 - python Telethon
- ios - 未从集合视图调用 prepareForSegue
- python - 如何删除数据框中值顺序不重要的行
- algorithm - 可分配给 cpu 的最大任务数
- mysql - 我不能在 gcloud sql 上使用任何命令
- typo3-8.x - Typo3:如何在开发环境中处理多域
- svn - 版本控制 - 分支干线或干线中的文件夹?
- asp.net-mvc - 如果我将数据库上下文从控制器传递给类,上下文会被释放吗?
- bokeh - 散景的 histogram2d 示例