gpt4 book ai didi

python - 循环获取 pandas 时间索引数据帧的滚动 future 值,我可以让它更快吗?

转载 作者:太空狗 更新时间:2023-10-30 02:38:44 26 4
gpt4 key购买 nike

data['rolling_avg_val'] = 0
future_window = '1h'
for i in range(data.shape[0]):
start_data_idx = data.index[i]
end_data_idx = start_data_idx + pd.Timedelta(future_window)
temp_avg = data['values'][start_data_idx:end_data_idx].mean()
if temp_avg == 0:
continue
data.loc[start_data_idx,'rolling_avg_val'] = temp_avg

数据框大约有 5,000,000 行,表示两周内的数据,看起来像这样,其中索引是以毫秒为单位的时间戳:

2017-04-12 12:19:04.987   0
2017-04-12 12:19:05.157 1
2017-04-12 12:19:05.297 0
2017-01-12 12:19:05.330 0
2017-04-12 12:19:05.487 0
2017-04-12 12:19:05.530 1
2017-04-12 12:19:05.640 0
2017-04-12 12:19:05.703 1

如您所见,时间戳不是均匀分布的,end_data_idx 不一定在数据帧中,但 pandas 在切片时能够获得正确的范围。我看到的一个常见解决方案是填充缺失的时间间隔,然后移动结果。但是,这会使内存爆炸,所以我尽量避免这种情况。

在我的机器上,它看起来每秒大约可以处理 800 行。有没有另一种方法来思考这个问题以获得更快的解决方案?

编辑:

预期输出:

                          rolling_avg
2017-04-12 12:19:04.987 0.375
2017-04-12 12:19:05.157 0.429
2017-04-12 12:19:05.297 0.333
2017-01-12 12:19:05.330 0.4
2017-04-12 12:19:05.487 0.5
2017-04-12 12:19:05.530 0.667
2017-04-12 12:19:05.640 0.5
2017-04-12 12:19:05.703 1.0

最佳答案

反向df

翻转索引符号(从单调递减到递增

滚动均值()

再次翻转索引符号

再次反转df

df2 = df[::-1]
df2.index = pd.datetime(2050,1,1) - df2.index
df2 = df2.rolling('1H').mean()
df3 = df2[::-1]
df3.index = df.index

关于python - 循环获取 pandas 时间索引数据帧的滚动 future 值,我可以让它更快吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46100962/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com