如何使用Python计算不规则时间间隔数据的时间加权平均值?
不规则时序数据按天计算时间加权平均值Python实现
实现思路
将不规则时间序列重采样为固定间隔(如1小时)的序列,使用前向填充补全缺失值,完全符合「无对应取值时取最后一次有效值」的规则,之后按天求平均值即可直接得到时间加权结果,不需要手动计算区间时长,逻辑简单不易出错。
依赖安装
先安装数据处理所需的pandas库:
pip install pandas
完整实现代码
import pandas as pd # 原始数据,也可以通过pd.read_csv从文件读取 raw_data = [ ["17-5-2021 03:00", 84.9], ["17-5-2021 11:00", 84.9], ["17-5-2021 15:00", 84.7], ["17-5-2021 23:00", 84.7], ["18-5-2021 03:00", 84.5], ["18-5-2021 11:00", 84.5], ["18-5-2021 15:00", 84.9], ["18-5-2021 23:00", 84.9] ] df = pd.DataFrame(raw_data, columns=["事件时间", "数值"]) # 转换时间列为datetime格式,设置为索引并按时间排序 df["事件时间"] = pd.to_datetime(df["事件时间"], format="%d-%m-%Y %H:%M") df = df.set_index("事件时间").sort_index() # 重采样为1小时间隔,前向填充缺失值,bfill用于填充第一天起始时段的空白值,可按需调整 hourly_df = df.resample("H").ffill().bfill() # 按天分组计算平均值即为时间加权平均值 daily_weighted_avg = hourly_df.groupby(hourly_df.index.date)["数值"].mean().reset_index() # 格式化日期输出 daily_weighted_avg["index"] = pd.to_datetime(daily_weighted_avg["index"]).dt.strftime("%d-%m-%Y") daily_weighted_avg.columns = ["事件时间", "加权平均值"] print(daily_weighted_avg)
灵活调整说明
- 若需要更高计算精度,将
resample("H")改为resample("T")即可切换为分钟级重采样 - 若不需要填充第一天最早数据点之前的时段,删除
.bfill()即可,计算时会自动排除空白时段 - 若统计区间需要调整为每日某一固定时刻到次日同一时刻,修改
groupby的时间偏移参数即可适配
内容的提问来源于stack exchange,提问作者goel89
相关产品推荐
相关产品推荐

