我的问题是我有一个非常大的时间序列(大约500万到1000万obs),其中有一些事件标记了标志。在这种情况下,股票价格下跌会触发一个事件,如果事件被触发,那么这个事件的虚拟变量是1或0。我想从这个时间序列中提取事件本身和随后29天的数据。显然,这涉及到某种类型的数组拼接。在
我有一些简单的代码可以做到这一点(它只是将标志和接下来的29天标记为2,但是从那里可以很容易地过滤数据帧),但是它依赖于pandas数据帧拼接,这不是很快。代码如下:
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函数可能会更快,但是我不知道从哪里开始。在
这里有一种可能的方法。也许不是那么快,处理10000000行数据集需要1分钟。其思想是,通过在随后的几天使用
.shift(-i)
填充新列,它可以避免在每个groupby
内的行上循环。它的优点是可以灵活地重塑结果数据帧,例如stack()
以获得堆叠的记录。在相关问题 更多 >
编程相关推荐