Pandas数据框:使用线性插值重采样

3 投票
1 回答
5247 浏览
提问于 2025-04-18 16:51

我正在尝试让一个比较基础的重采样方法在一个pandas数据框中工作。我的数据框df是以日期时间为索引的,并且包含价格信息。

                               price
datetime                            
2000-08-16 09:29:55.755000  7.302786
2000-08-16 09:30:10.642000  7.304059
2000-08-16 09:30:26.598000  7.304435
2000-08-16 09:30:41.372000  7.304314
2000-08-16 09:30:56.718000  7.304334

我想把这个数据降采样到5分钟。使用

df.resample(rule='5Min',how='last',closed='left')

会取到我数据中最接近左边的5分钟的点;类似地,

df.resample(rule='5Min',how='first',closed='left')

会取到最接近右边的点。不过,我想要的是在左边和右边的点之间进行线性插值,也就是说,如果我的df包含两个连续的条目

time t1, price p1
time t2, price p2

t1<t<t2 where t is a multiple of 5min

那么重采样后的数据框应该有这个条目

time t, price p1+(t-t1)/(t2-t1)*(p2-p1)

1 个回答

2

试着创建两个独立的数据框,先用 reset_index 让它们的索引变成相同的数字,然后用 fillna 填充缺失值,最后就可以在 df1 和 df2 上进行计算了。例如:

df1 = df.resample(rule='5Min',how='last',closed='left').reset_index().fillna(method='ffill')
df2 = df.resample(rule='5Min',how='first',closed='left').reset_index().fillna(method='ffill')

dt = df1.datetime - df2.datetime
px_fld = df1.price + ...

这样做应该就能解决问题。

撰写回答