如何对DataFrame外推计算15分钟和30分钟平均值?
按分组计算比值的15/30分钟平均值(不足时长外推)
现有一个按ID-A和ID-B分组、时间列窗口为3分钟的DataFrame,需计算sum与num比值的15分钟和30分钟平均值。规则如下:
- 若数据覆盖时长达到15或30分钟,直接计算对应时长的平均值
- 若时长不足,则按已有数据的平均水平外推至目标时长
可复现的DataFrame代码
import pandas as pd data = {'time': ['09:30:00', '09:33:00', '09:36:00', '09:36:00', '09:39:00', '09:42:00', '09:30:00', '09:33:00', '09:36:00'], 'sum': [5, 8, 5, 10, 15, 2, 10, 12, 5], 'num': ['2', '2', '2', '3', '3', '3', '2', '2', '2']} my_index = pd.MultiIndex.from_arrays([["A"]*6 + ["B"]*3, [1, 1, 1, 2, 2, 2, 1, 1, 1]], names=["ID-A", "ID-B"]) df = pd.DataFrame(data, index=my_index)
注:每组ID-A和ID-B对应的num值固定。
期望输出
ID-A ID-B time sum num 15min 30min A 1 09:30:00 5 2 15 30 09:33:00 8 2 15 30 09:36:00 5 2 15 30 2 09:36:00 10 3 15 30 09:39:00 15 3 15 30 09:42:00 2 3 15 30 B 1 09:30:00 10 2 22.5 45 09:33:00 12 2 22.5 45 09:36:00 5 2 22.5 45
计算逻辑示例
对于ID-A为A、ID-B为1的分组,数据仅覆盖9分钟:
- 先计算每分钟的平均
sum值:(5+8+5)/9 = 2- 再除以固定
num值2,得到每分钟的比值:2/2 = 1- 外推至15分钟:
1*15 = 15;外推至30分钟:1*30 = 30
我的思路
由于最大需计算30分钟平均值,可先将所有数据外推至30分钟,再衍生15分钟和30分钟结果,最终保留ID-A、ID-B、15min、30min列即可。
内容的提问来源于stack exchange,提问作者MemeFast King
相关产品推荐
相关产品推荐

