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

如何在Pandas中将小时级数据重采样为半小时级并重复数值?

问题:将小时级DataFrame重采样为半小时级并重复原数值

我有一个名为prices的DataFrame,数据如下:

DateTime              PriceAmountGBP
0   2022-03-27 23:00:00 202.807890
1   2022-03-28 00:00:00 197.724150
... ... ...
23  2023-01-24 22:00:00 149.039322

我希望将prices从小时级数据重采样为半小时级,让PriceAmountGBP在对应半小时重复,期望输出如下:

DateTime                PriceAmountGBP
0   2022-03-27 23:00:00 202.807890
1   2022-03-27 23:30:00 202.807890
... ... ...
23  2023-01-24 20:00:00 168.227992

我尝试了以下代码,但结果不符合需求:

prices.set_index('DateTime').resample('30T').interpolate()

该代码输出的是插值后的数值,而非重复原小时数值,寻求正确的实现方法。


解决方案

你需要的是**向前填充(forward fill)**原小时的数值,而非插值计算新值,以下是几种可行的实现方式:

方法1:重采样后使用ffill()

# 设置DateTime为索引,重采样为30分钟频率,向前填充原数值
result = prices.set_index('DateTime').resample('30T').ffill()

resample('30T')会生成半小时间隔的时间索引,ffill()会将前一个存在的小时数值填充到新增的半小时行中,完全匹配你的需求。

方法2:使用asfreq()结合ffill()

如果原数据的时间索引是连续的小时级序列,也可以直接转换频率再填充:

prices.set_index('DateTime').asfreq('30T').ffill()

asfreq('30T')会生成半小时频率的索引,缺失的数值通过ffill()复用前一小时的数据。

方法3:手动生成索引并重新对齐

若需要更灵活的时间范围控制,可以手动创建半小时频率的索引后重新对齐数据:

import pandas as pd

# 生成从原数据起始到结束的半小时频率索引
new_index = pd.date_range(start=prices['DateTime'].min(), end=prices['DateTime'].max(), freq='30T')
# 设置原索引,重新索引后向前填充
result = prices.set_index('DateTime').reindex(new_index).ffill()

以上方法都会让原小时的PriceAmountGBP值重复到对应的半小时行中,与你期望的输出一致。


内容的提问来源于stack exchange,提问作者K.Best

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 17:01:25