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

如何在pandas.DataFrame.resample()中设置低于现有最小TimedeltaIndex的起始值?

问题描述

有一个记录测试中每分钟两个设置值的DataFrame,示例如下:

import pandas as pd

df = pd.DataFrame(
    {
        "time": [
            pd.Timedelta(1, unit="min"),
            pd.Timedelta(2, unit="min"),
            pd.Timedelta(3, unit="min"),
            pd.Timedelta(4, unit="min"),
            pd.Timedelta(5, unit="min"),
        ],
        "setting_1": [4.0, 4.0, 6.0, 6.0, 8.0],
        "setting_2": [1.0, 2.0, 3.0, 4.0, 5.0],
    }
).set_index("time")

输出结果:

setting_1  setting_2
time                         
0 days 00:01:00        4.0        1.0
0 days 00:02:00        4.0        2.0
0 days 00:03:00        6.0        3.0
0 days 00:04:00        6.0        4.0
0 days 00:05:00        8.0        5.0

需要将其与每10秒采样一次的测试结果DataFrame合并,原本使用df.resample("10S").bfill()扩展索引,但该方法索引起始于原数据的最小索引0 days 00:01:00。现希望索引起始于0 days 00:00:10,且该时间段内的设置值用1分钟处的值回填,同时无需拼接临时DataFrame。


更优解决方案

方法1:resample指定start参数

直接在resample中设置start为目标起始时间,结合bfill()自动扩展索引并回填值:

# 指定重采样起始时间为10秒,间隔10秒
resampled_df = df.resample("10S", start=pd.Timedelta("10s")).bfill()
resampled_df.head()

输出结果:

setting_1  setting_2
time                         
0 days 00:00:10        4.0        1.0
0 days 00:00:20        4.0        1.0
0 days 00:00:30        4.0        1.0
0 days 00:00:40        4.0        1.0
0 days 00:00:50        4.0        1.0

原理:start参数强制重采样序列从指定时间开始,bfill()会用原数据中第一个非缺失值(即00:01:00的设置值)填充起始点到原最小索引之间的区间。

方法2:构造目标索引后用reindex回填

手动生成完整的目标时间索引,再通过reindex结合bfill()实现填充:

# 生成从10秒到原数据最大时间的10秒间隔索引
target_index = pd.TimedeltaIndex(
    pd.date_range(start=pd.Timedelta("10s"), end=df.index.max(), freq="10S").time
)

# 重新索引并回填缺失值
resampled_df = df.reindex(target_index).bfill()
resampled_df.head()

此方法可精准控制索引范围,适合复杂时间区间的需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:22:32