基于累积求和计算15分钟间隔的实时生产数据
15分钟区间实时生产增量计算方案
问题需求
现有包含机器编码M、时间戳DateTime、累积求和Cumulative的实时生产数据,已通过DateTime向下取整生成15分钟时间区间TimeBins,需要:
- 提取每台机器在每个
TimeBins中的最新Cumulative值 - 计算相邻15分钟区间的累积值差值,生成含
Diff列的新DataFrame,得到每台机器的15分钟实时生产数据
原始数据
import pandas as pd df = pd.DataFrame({ 'M': ['18','18','18','19','19','19','18','18','18','19','19','19','19'], 'Cumulative': ['8','10','11','5','8','9','13','16','17','14','19','20','22'], 'DateTime': [ '2022-08-01 07:14:28','2022-08-01 07:25:58','2022-08-01 07:29:19', '2022-08-01 07:13:17','2022-08-01 07:28:58','2022-08-01 07:29:01', '2022-08-01 07:34:54','2022-08-01 07:36:02','2022-08-01 07:38:17', '2022-08-01 07:33:46','2022-08-01 07:37:09','2022-08-01 07:38:17','2022-08-01 07:41:38' ] })
已完成预处理
# 转换时间格式 df['DateTime'] = pd.to_datetime(df['DateTime']) # 生成15分钟时间桶(向下取整) df['TimeBins'] = df['DateTime'].dt.floor(freq='15T') # 转换累积值为整数类型 df['Cumulative'] = df['Cumulative'].astype('int32')
期望输出
M DateTime TimeBins Cumulative Diff 0 18 2022-08-01 07:14:28 2022-08-01 07:00:00 8 NaN 1 18 2022-08-01 07:29:19 2022-08-01 07:15:00 11 3.0 2 18 2022-08-01 07:38:17 2022-08-01 07:30:00 17 6.0 3 19 2022-08-01 07:13:17 2022-08-01 07:00:00 5 NaN 4 19 2022-08-01 07:29:01 2022-08-01 07:15:00 9 4.0 5 19 2022-08-01 07:41:38 2022-08-01 07:30:00 22 13.0
注:原期望结果中机器19的Diff值11为笔误,实际计算应为22-9=13
解决方案代码
# 1. 按机器、时间桶、时间戳排序,确保每个组内最新记录排在首位 sorted_df = df.sort_values(by=['M', 'TimeBins', 'DateTime'], ascending=[True, True, False]) # 2. 分组提取每个机器-时间桶的最新记录 latest_records = sorted_df.groupby(by=['M', 'TimeBins'], as_index=False).first() # 3. 按机器分组计算相邻时间桶的累积值差值 latest_records['Diff'] = latest_records.groupby('M')['Cumulative'].diff() # 4. 调整列顺序匹配期望输出 final_df = latest_records[['M', 'DateTime', 'TimeBins', 'Cumulative', 'Diff']] # 查看结果 print(final_df)
核心逻辑说明
- 排序分组取最新:通过多关键字排序,保证每个机器的每个时间桶内,最新的时间戳记录排在最前面,再用
groupby.first()提取唯一记录。 - 分组计算差值:使用
groupby.diff()按机器单独计算相邻区间的累积值差,自动为每个机器的第一个区间生成NaN,无需额外处理边界情况。
内容的提问来源于stack exchange,提问作者EAdiguzel
相关产品推荐
相关产品推荐

