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

Pandas上采样时如何保留最后一个索引的后续时间间隔?

Pandas上采样时如何保留最后一个索引的后续时间间隔?

我完全懂你的困扰——用resample做上采样时,最后一个原始时间点之后的间隔总是被漏掉,对吧?这是因为Pandas默认只会处理原数据时间范围内的间隔,不会自动往后扩展到下一个采样点。想要补上最后那段间隔,其实只需要简单调整一下处理逻辑就行,下面给你两种实用的方法:

方法一:扩展原索引后再采样

这种方法通用性极强,不管你用30分钟、15分钟还是5分钟间隔都适用,步骤很清晰:

  1. 先拿到原数据的最后一个时间戳,加上目标采样间隔的时长;
  2. 把这个新的时间点添加到原DataFrame的索引中;
  3. 再用resample+ffill完成上采样。

给你贴个具体的代码例子:

import pandas as pd

# 你的原始数据
data = {
    'TIME': ['2023-01-02 01:00:00', '2023-01-02 02:00:00', '2023-01-02 03:00:00'],
    'VALUE': [94.73, 95.30, 67.16]
}
df = pd.DataFrame(data)
df['TIME'] = pd.to_datetime(df['TIME'])
df = df.set_index('TIME')

# 定义目标采样频率(可替换为'15T'或'5T')
target_freq = '30T'

# 计算需要扩展的时间点
last_time = df.index[-1]
extended_time = last_time + pd.Timedelta(target_freq)

# 扩展索引,加入新时间点
df_extended = df.reindex(df.index.append(pd.DatetimeIndex([extended_time])))

# 执行上采样
result = df_extended.resample(target_freq).ffill()
print(result)

运行后就能得到你想要的结果,包含2023-01-02 03:30:00这一行。

方法二:采样后手动追加最后一行

如果你不想修改原数据的索引,也可以在采样完成后,手动生成最后一行并追加进去:

# 先执行你原来的采样逻辑
sampled_df = df.set_index('TIME').resample(target_freq).ffill()

# 生成最后一行:用原始最后时间+间隔做索引,值和最后一行保持一致
last_row = pd.DataFrame(
    {'VALUE': [df['VALUE'].iloc[-1]]},
    index=[df.index[-1] + pd.Timedelta(target_freq)]
)

# 合并到采样结果中
result = pd.concat([sampled_df, last_row])

这种方法更直接,但如果需要频繁切换不同采样频率,方法一的复用性会更好。

备注:内容来源于stack exchange,提问作者oskros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 11:47:35