【发布时间】:2019-11-14 05:32:07
【问题描述】:
给定一个数据框,其中的行对应于某些间隔的收益,我正在尝试获得每天的 n 分钟远期收益。
我已经尝试使用 dask 和多线程对每个组进行滚动计算,但这似乎是我能想到的最快的方法。然而,对于大型数据框(数百万行)(252 天和 1000 支股票),执行此步骤最多需要 40 分钟。
ret_df.sort_values(['date','time','stock'], ascending=False, inplace=True)
gb = ret_df.groupby(['date','stock'])
forward_sum_df = gb.rolling(4, on='time', min_periods = 0)['interval_return'].sum().reset_index()
正如预期的那样,这将返回数据框中每一行的接下来 4 次的总和(按日期和库存),但执行速度很慢。感谢您的帮助!
编辑:添加示例以澄清
date stock time interval_ret
0 2017-01-03 10000001 09:30:00.000000 0.001418
1 2017-01-03 10000001 09:40:00.000000 0.000000
2 2017-01-03 10000001 09:50:00.000000 0.000000
3 2017-01-03 10000001 10:00:00.000000 -0.000474
4 2017-01-03 10000001 10:10:00.000000 -0.001417
5 2017-01-03 10000001 10:20:00.000000 -0.000944
6 2017-01-03 10000001 10:30:00.000000 0.000000
7 2017-01-03 10000001 10:40:00.000000 0.000000
8 2017-01-03 10000001 10:50:00.000000 0.000000
9 2017-01-03 10000001 11:00:00.000000 -0.000472
以此类推,库存 10000002... 日期 2017-01-04....
例如,如果我的持有期是 30 分钟而不是 10 分钟,我想总结 3 行 'interval_ret',按日期和股票分组。例如:
date stock time interval_ret_30
0 2017-01-03 10000001 09:30:00.000000 0.001418
1 2017-01-03 10000001 09:40:00.000000 0.000000 - 0.000474
2 2017-01-03 10000001 09:50:00.000000 0.000000 - 0.000474 - 0.001417
3 2017-01-03 10000001 10:00:00.000000 -0.000474 - 0.001417 - 0.000944
4 2017-01-03 10000001 10:10:00.000000 -0.001417 - 0.000944
5 2017-01-03 10000001 10:20:00.000000 -0.000944
6 2017-01-03 10000001 10:30:00.000000 0.000000
7 2017-01-03 10000001 10:40:00.000000 -0.000472
8 2017-01-03 10000001 10:50:00.000000 -0.000472
9 2017-01-03 10000001 11:00:00.000000 -0.000472
【问题讨论】:
-
嗨,Shrinath,你能提供一个minimal, reproducible example吗?
-
编辑了帖子;希望这有助于澄清我的意思。谢谢!
标签: python pandas pandas-groupby rolling-computation