Pandas上采样时如何保留最后一个索引的后续时间间隔?
Pandas上采样时如何保留最后一个索引的后续时间间隔?
我完全懂你的困扰——用resample做上采样时,最后一个原始时间点之后的间隔总是被漏掉,对吧?这是因为Pandas默认只会处理原数据时间范围内的间隔,不会自动往后扩展到下一个采样点。想要补上最后那段间隔,其实只需要简单调整一下处理逻辑就行,下面给你两种实用的方法:
方法一:扩展原索引后再采样
这种方法通用性极强,不管你用30分钟、15分钟还是5分钟间隔都适用,步骤很清晰:
- 先拿到原数据的最后一个时间戳,加上目标采样间隔的时长;
- 把这个新的时间点添加到原DataFrame的索引中;
- 再用
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
相关产品推荐
相关产品推荐

