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

如何用Pandas resample交替按10/20分钟对时序数据求平均?

解决交替时间间隔求均值的方案

优先使用resample的实现思路:先按最小间隔(10分钟)做全量重采样,再通过分组合并的方式实现交替的10/20分钟均值计算,步骤如下:

  1. 预处理数据:确保时间列是datetime类型并设为索引
import pandas as pd
import numpy as np

# 转换时间列类型并设置为索引
df['time'] = pd.to_datetime(df['time'])
df = df.set_index('time')
  1. 按10分钟间隔重采样:先得到所有10分钟区间的均值
# 按10分钟重采样,计算每个区间的velocity均值
resampled_10min = df.resample('10T').mean().reset_index()
  1. 生成合并标签:标记哪些10分钟区间需要合并成20分钟区间(实现10→20→10→20的交替)
# 每3个10分钟为一组:第1个单独保留,后2个合并为20分钟
merge_tags = []
current_tag = 0
for idx in range(len(resampled_10min)):
    merge_tags.append(current_tag)
    # 每处理完第1、4、7...个10分钟区间(索引0,3,6...),切换到下一个标签
    if idx % 3 == 0:
        current_tag += 1
    # 每处理完第3、6、9...个10分钟区间(索引2,5,8...),切换到下一个标签
    elif idx % 3 == 2:
        current_tag += 1

resampled_10min['merge_tag'] = merge_tags
  1. 按标签分组计算最终均值:
# 按合并标签分组,取每个组的起始时间和velocity均值
final_result = resampled_10min.groupby('merge_tag').agg(
    time=('time', 'first'),  # 取组内第一个10分钟区间的起始时间
    velocity=('velocity', 'mean')
).reset_index(drop=True)

# 查看结果
print(final_result)

另一种直接分组的方案(无需先resample)

如果数据量极大,也可以直接通过时间偏移计算分组键,避免生成中间的10分钟重采样结果:

df['time'] = pd.to_datetime(df['time'])
start_time = df['time'].min()

# 计算每个时间点相对于起始时间的总秒数偏移
offsets = (df['time'] - start_time).dt.total_seconds()

# 交替块的周期为30分钟(10+20),对应1800秒
cycle_sec = 10*60 + 20*60
# 单个10分钟块的秒数
block_10_sec = 10*60

# 计算分组ID:每个周期内前10分钟为一组,后20分钟为一组
cycle = offsets // cycle_sec
in_cycle = offsets % cycle_sec
group_id = np.where(in_cycle < block_10_sec, 2*cycle, 2*cycle + 1)

# 按分组ID计算均值
final_result = df.groupby(group_id).agg(
    time=('time', lambda x: start_time + pd.Timedelta(seconds=(x - start_time).dt.total_seconds().min())),
    velocity=('velocity', 'mean')
).reset_index(drop=True)[['time', 'velocity']]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:23:15