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

如何用Pandas将DataFrame重采样为30分钟间隔并填充均值?

Pandas重采样时间序列并分配日均至30分钟区间的问题

原始数据结构

[
    {
        "datetime":"2021-05-21 00:00:00",
        "value":5
    },
    {
        "datetime":"2021-05-22 00:00:00",
        "value":6
    }
]
  • 其中datetime字段支持小时/分钟/天/月/年等时间格式

需求

将上述数据重采样为30分钟间隔,把每日的value平均分配到每个30分钟区间(例如5÷48≈0.104166667,6÷48=0.125)。

现有代码问题

尝试以下代码时,虽能生成30分钟间隔,但结果全为NaN,未正确计算均值:

df = pd.DataFrame(data)
df["datetime"] = df["datetime"].apply(pd.to_datetime)
df.set_index("datetime")
df.resample("30min").mean()

期望输出格式

[
    {
        "datetime":"2021-05-21 00:00:00",
        "value":0.104166667
    },
    {
        "datetime":"2021-05-21 00:30:00",
        "value":0.104166667
    },
    {
        "datetime":"2021-05-21 01:00:00",
        "value":0.104166667
    },
    ...
    {
        "datetime":"2021-05-22 00:00:00",
        "value":0.125
    },
    {
        "datetime":"2021-05-22 00:30:00",
        "value":0.125
    },
    ...
]

解决方案

问题根源

  1. df.set_index("datetime")默认返回新的DataFrame,不会修改原df,后续resample还是基于原df的默认索引执行,导致无数据匹配,返回NaN。
  2. 普通的resample.mean()用于计算区间内已有数据的均值,但这里需求是将单日总量分摊到每个子区间,需要先补全时间序列再分配数值。

正确代码示例

import pandas as pd

data = [
    {"datetime":"2021-05-21 00:00:00", "value":5},
    {"datetime":"2021-05-22 00:00:00", "value":6}
]

# 1. 转换时间格式并设置为索引
df = pd.DataFrame(data)
df["datetime"] = pd.to_datetime(df["datetime"])
df = df.set_index("datetime")

# 2. 重采样为30分钟间隔,向前填充缺失的时间点对应的value
resampled_df = df.resample("30min").ffill()

# 3. 将单日总量平均分配到每个30分钟区间(一天共48个30分钟间隔)
resampled_df["value"] = resampled_df["value"] / 48

# 转换为期望的JSON格式
result = resampled_df.reset_index().rename(columns={"index": "datetime"}).to_dict("records")
print(result)

代码说明

  • df.set_index("datetime")赋值回df,确保后续操作基于时间索引执行。
  • resample("30min").ffill()会生成完整的30分钟时间序列,并将前一个时间点的value填充到后续区间。
  • 因为一天有48个30分钟区间,所以将每个区间的value除以48,得到日均分摊后的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:29