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

如何让带timedelta的Pandas Series重采样从0时间间隔开始?

让Pandas带Timedelta索引的Series从0时刻开始重采样

你需要让带Timedelta索引的Series重采样时,以timedelta(seconds=0)作为起始基准,而非默认的首个索引值。以下是实现方法:

问题复现

你的原始代码及输出:

from datetime import timedelta
from random import sample
import pandas as pd

s = pd.Series(1, index=[timedelta(minutes=m) for m in sample(range(1, 100), 10)])
print(s.resample('1h').count())

当前输出:

0 days 00:12:00    9
0 days 01:12:00    1
dtype: int64

期望输出是从0时刻开始的完整小时区间,包括计数为0的区间:

0 days 00:00:00    9
0 days 01:00:00    0
0 days 02:00:00    1
dtype: int64

解决方案

核心是重采样时指定origin参数为pd.Timedelta(0),同时确保保留计数为0的区间:

from datetime import timedelta
from random import sample
import pandas as pd

s = pd.Series(1, index=[timedelta(minutes=m) for m in sample(range(1, 100), 10)])

# 指定起始点为0时刻重采样,再补全所有区间的缺失值
resampled = s.resample('1h', origin=pd.Timedelta(0)).count()
# 生成从0到最大索引向上取整的完整时间区间
full_range = pd.timedelta_range(start='0h', end=s.index.max().ceil('1h'), freq='1h')
result = resampled.reindex(full_range, fill_value=0)

print(result)

代码解释

  • origin=pd.Timedelta(0):强制重采样的起始基准为0时刻,而非Series中的首个索引值。
  • pd.timedelta_range(...):生成从0时刻到Series最大索引向上取整的完整小时区间,确保所有需要的区间都被包含。
  • reindex(fill_value=0):将重采样结果对齐到完整区间,缺失的区间填充0,符合你的期望输出。

简化写法

如果不需要严格对齐到最大索引的上一个小时,也可以用asfreq快速填充:

result = s.resample('1h', origin=pd.Timedelta(0)).count().asfreq('1h', fill_value=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:28