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

Python如何对毫秒级时间戳数据集按每5秒窗口计算数值均值

原有代码问题分析

  • 列名不匹配:你读取CSV时指定的col_list列名和数据集实际表头pid_col/timestamp_col/value_col不对应,会直接读取报错。
  • 时间解析参数错误:你的时间列是标准的带高精度小数秒的字符串格式,不需要加unit='ms'参数,该参数仅用于时间戳为数字的场景,加了会导致时间解析结果完全错误。
  • 时间窗口对齐不符合要求:默认的pd.Grouper(freq='5S')会将窗口对齐到整除5秒的时间刻度,无法匹配你要求的首个窗口从07:14:56开始的规则。

正确实现代码

import pandas as pd
from pandas import Grouper

# 1. 读取数据,匹配实际列名,可按需重命名
df = pd.read_csv("data.csv", usecols=["pid_col", "timestamp_col", "value_col"])
df.columns = ["pid", "timestamp", "value"]

# 2. 正确解析高精度时间
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 3. 按指定规则分组聚合:origin参数指定首个窗口左边界,后续自动推移5秒
# 若需要窗口包含左右两端边界,可增加closed='both'参数
df = df.groupby(
    ['pid', Grouper(freq='5S', key='timestamp', origin=pd.Timestamp('2019-03-29 07:14:56'))],
    as_index=False
).agg(
    window_start_time=('timestamp', 'first'),
    value_avg=('value', 'mean')
)

低版本pandas兼容方案

如果使用的pandas版本低于1.3.0不支持origin参数,可通过时间偏移实现相同效果:

import pandas as pd
from pandas import Grouper

df = pd.read_csv("data.csv", usecols=["pid_col", "timestamp_col", "value_col"])
df.columns = ["pid", "timestamp", "value"]
df['timestamp'] = pd.to_datetime(df['timestamp'])

# 时间偏移后按默认5秒分组,还原后即可匹配需求边界
df['shifted_ts'] = df['timestamp'] - pd.Timedelta(seconds=1)
df = df.groupby(
    ['pid', Grouper(freq='5S', key='shifted_ts')],
    as_index=False
).agg(
    window_start_time=('timestamp', 'first'),
    value_avg=('value', 'mean')
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:03