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

如何优化Pandas中时间序列数据的上采样均分实现方案?

优化方案:简洁高效的均分上采样

核心思路

先计算每个原始周期的日均数值,再通过上采样填充到周期内的每一天,彻底避免原代码中复杂的分组、transform操作,同时解决所有痛点问题。

基础实现(月度数据场景)

import pandas as pd

# 原始月度成本数据
df = (pd.DataFrame([[pd.to_datetime('2023-01-01'), 31], 
                    [pd.to_datetime('2023-02-01'), 14]], 
                    columns=['time', 'cost']
                    )
      .set_index("time")
     )

# 1. 计算每个周期的天数
# 中间行:用下一个周期起始日减当前周期起始日得到天数
period_days = (df.index.shift(1) - df.index).days
# 最后一行:直接取当前月份的总天数
period_days.iloc[-1] = df.index[-1].days_in_month

# 2. 计算日均数值(支持多列,直接对所有数值列批量操作)
df_daily_avg = df.div(period_days, axis=0)

# 3. 上采样到日,向前填充日均数值,覆盖整个周期
df_final = df_daily_avg.resample('D').ffill()

方案优势

  • 支持多列数据:直接对整个DataFrame执行除法操作,无单列限制
  • 无需硬编码原始频率:利用索引的shift和days_in_month自动计算周期天数,适配月度数据
  • 兼容非均匀索引:通过shift(1)计算相邻周期的间隔天数,即使索引间隔不均匀也能正确处理
  • 逻辑简洁清晰:三步完成需求,避免添加临时行、复杂分组等冗余操作

扩展:适配任意周期的通用版本

如果数据是任意间隔的datetime索引(比如部分间隔1个月、部分间隔2个月),可以自动计算所有周期的天数:

# 计算所有周期的结束日期:中间周期用下一个起始日,最后一个周期取当月最后一天
period_ends = df.index.shift(1).fillna(df.index[-1] + pd.offsets.MonthEnd(0))
# 计算每个周期的天数
period_days = (period_ends - df.index).days

# 后续步骤与基础版一致
df_daily_avg = df.div(period_days, axis=0)
df_final = df_daily_avg.resample('D').ffill()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:10:22