python - 你如何与熊猫进行分组,它对同一列中的值求和但被一组行数偏移
问题描述
我有一张如下表所示的表格。我想按 id、start_time 和方法进行分组,这样我就可以为每个类似的时间戳添加右转、直通、左转和掉头。
交集_id | 开始时间 | 方法 | 移动 | 体积 |
---|---|---|---|---|
799028 | 中午 12:00:00 | 南行 | 正确的 | 2 |
799028 | 上午 12:15:00 | 南行 | 正确的 | 4 |
799028 | 上午 12:30:00 | 南行 | 正确的 | 6 |
799028 | 中午 12:00:00 | 南行 | 直通 | 4 |
799028 | 上午 12:15:00 | 南行 | 直通 | 6 |
799028 | 上午 12:30:00 | 南行 | 直通 | 8 |
799028 | 中午 12:00:00 | 南行 | 剩下 | 6 |
799028 | 上午 12:15:00 | 南行 | 剩下 | 8 |
799028 | 上午 12:30:00 | 南行 | 剩下 | 10 |
799028 | 中午 12:00:00 | 南行 | 掉头 | 10 |
799028 | 上午 12:15:00 | 南行 | 掉头 | 12 |
799028 | 上午 12:30:00 | 南行 | 掉头 | 14 |
示例结果:
交集_id | 开始时间 | 方法 | 移动 | 体积 |
---|---|---|---|---|
799028 | 中午 12:00:00 | 南行 | 正确的 | 24 |
799028 | 上午 12:15:00 | 南行 | 正确的 | 30 |
799028 | 上午 12:30:00 | 南行 | 正确的 | 38 |
799028 | 中午 12:00:00 | 南行 | 直通 | 楠 |
799028 | 上午 12:15:00 | 南行 | 直通 | 楠 |
799028 | 上午 12:30:00 | 南行 | 直通 | 楠 |
799028 | 中午 12:00:00 | 南行 | 剩下 | 楠 |
799028 | 上午 12:15:00 | 南行 | 剩下 | 楠 |
799028 | 上午 12:30:00 | 南行 | 剩下 | 楠 |
799028 | 中午 12:00:00 | 南行 | 掉头 | 楠 |
799028 | 上午 12:15:00 | 南行 | 掉头 | 楠 |
799028 | 上午 12:30:00 | 南行 | 掉头 | 楠 |
这将不断重复,直到遍历所有 ID 和方法。
我尝试了几种不同的方法:
df['app_sum'] = df.groupby(['intersection_id','start_time','approach'], as_index=False)['volume'].transform('sum')
但是,此代码不会正确分组,也不会提供 nan 值;一旦通过初始时间戳集,它将重复这些值。
我尝试的第二个代码是
indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=4, offset=-3)
df['app_sum'] = (
df.groupby(['intersection_id','start_time','approach'])['volume'].rolling(window=indexer).sum().droplevel(0))
我知道这是错误的,因为没有窗户。
有什么建议么?
解决方案
你可以使用:
df['volume'] = (df.groupby(['intersection_id', 'start_time', 'approach'])
['volume'].transform('sum')
.where(df['movement'].eq('Right'))
)
输出:
intersection_id start_time approach movement volume
0 799028 12:00:00 AM Southbound Right 22.0
1 799028 12:15:00 AM Southbound Right 30.0
2 799028 12:30:00 AM Southbound Right 38.0
3 799028 12:00:00 AM Southbound Thru NaN
4 799028 12:15:00 AM Southbound Thru NaN
5 799028 12:30:00 AM Southbound Thru NaN
6 799028 12:00:00 AM Southbound Left NaN
7 799028 12:15:00 AM Southbound Left NaN
8 799028 12:30:00 AM Southbound Left NaN
9 799028 12:00:00 AM Southbound U-turn NaN
10 799028 12:15:00 AM Southbound U-turn NaN
11 799028 12:30:00 AM Southbound U-turn NaN
推荐阅读
- python - 在数据框中使用 .loc 将列值更改为小写
- javascript - Babylonjs VideoTexture 纵横比
- swiftui - 如何使用 ViewModifiers 返回视图
- ios - 如何从父视图隐藏/显示子视图
- swift - 防止视图在 NavigationView 中弹出
- java - MapStruct:使用目标字段类型作为对象时发生错误
- javascript - 制作随机座位安排计划应用程序的问题
- javascript - 单击图像后无法在 Phaser 3 中更改场景
- flutter - Visual Studio 代码未运行任何颤振命令
- ios - 如何将自定义视图添加为具有整个视图的导航栏左侧项目可以点击