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

Pandas实现15分钟数据上采样为1分钟并均摊数值的问题求解

解决方案

实现逻辑

  • 先计算原15分钟序列相邻两项的和,除以15得到每分钟需要填充的数值
  • 对原序列做1分钟上采样,用前向填充把计算好的单分钟值填充到对应区间的所有分钟行
  • 最后单独处理最后15分钟区间的边界值,可根据需求调整规则

完整可运行代码

import pandas as pd 
import numpy as np

# 构造测试数据(优化了原有冗余写法)
dates = pd.date_range(start="20190101",end="20200101", freq="15min")
values = np.random.randint(0,10,size=(len(dates), 1))
df = pd.DataFrame(values, index=dates, columns=['value'])

# 核心逻辑:计算相邻两个15分钟值的平均分摊额
# shift(-1)取后一个15分钟点的值,求和后除以15
df['min_val'] = (df['value'] + df['value'].shift(-1)) / 15
# 最后一个点没有下一个值,默认用自身值除以15,可根据需求调整
df['min_val'] = df['min_val'].fillna(df['value'] / 15)

# 1分钟重采样+前向填充
resampled_df = df.resample('min')['min_val'].ffill().to_frame(name='value')

# 打印前16行验证结果
print(resampled_df.head(16))
# 验证总和一致性
print(f"原数据总和:{df['value'].sum()}")
print(f"重采样后总和:{resampled_df['value'].sum()}")

代码说明

  • 核心用shift(-1)获取相邻下一个15分钟采样点的数值,和当前值求和后平摊到15个分钟点,完全匹配你提出的计算规则
  • 重采样后用ffill()前向填充,保证每个15分钟区间内的15个分钟点都对应同一个平摊值
  • 边界的最后一个15分钟区间默认按自身值平摊,如果你有其他边界处理需求可以直接修改fillna部分的逻辑
  • 如果需要完全保证原数据总和与重采样后总和一致,仅需把最后一个点的配对规则改成和第一个前序值配对即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:09:03