【发布时间】:2015-09-25 08:44:57
【问题描述】:
我的问题是我有一个非常大的时间序列(约 5-10 百万个 obs),其中某些事件标有标志。在这种情况下,是股票价格下跌触发了一个事件,该事件具有一个虚拟变量,如果事件被触发,则为 1 或 0。从这个时间序列中,我想提取事件本身和随后 29 天的数据。显然,这涉及到某种类型的数组拼接。
我有一些简单的代码应该可以解决问题(它只是将标志和接下来的 29 天标记为 2,但从那里过滤数据帧很简单)但它依赖于熊猫数据帧拼接,这不是很快。代码如下:
def first_drop(df):
indexlen = len(df.dropflag[df.dropflag==1].index)
for y in range(indexlen):
x = df.dropflag[df.dropflag==1].index[y]
df.dropflag[x:30]=2
return df.dropflag
dstk['dropflag2'] = dstk[["permno","dropflag"]].groupby('permno').apply(first_drop)
有没有其他人发现的更快的方法来进行这种类型的拼接,您可以获得下一个 x 数量的条目?我认为使用 numpy 数组或 cythonized 函数可能会更快,但我不太清楚从哪里开始。
【问题讨论】:
标签: python numpy optimization pandas cython