You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对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分钟:

  1. 先计算每分钟的平均sum值:(5+8+5)/9 = 2
  2. 再除以固定num值2,得到每分钟的比值:2/2 = 1
  3. 外推至15分钟:1*15 = 15;外推至30分钟:1*30 = 30

我的思路

由于最大需计算30分钟平均值,可先将所有数据外推至30分钟,再衍生15分钟和30分钟结果,最终保留ID-A、ID-B、15min、30min列即可。


内容的提问来源于stack exchange,提问作者MemeFast King

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:35:23