熊猫滚动总和(如果满足条件但在列中指定了条件)

时间:2018-09-11 02:33:06

标签: python pandas numpy vectorization rolling-sum

我正在尝试滚动计算1000行。我想对所有行的ClosePrice在ClosePrice_low和ClosePrice_high之间的所有行及其上方的999求和。

例如:

滚动计数1000:检查行0:1000,并将其总计在0.0000189375和0.0000185625之间(也就是找到行0到1000的所有行,在行1000的ClosePrice_low和ClosePrice_high之间,并对ClosePrice求和)

滚动计数1001:检查1:1001行,并且总和是否介于0.0000189476和0.0000185724

在下面执行此操作无效:

tempdf['ClosePrice'][np.where(tempdf['ClosePrice'] < tempdf['ClosePrice_high'] & \
    tempdf['ClosePrice'] > tempdf['ClosePrice_low'],tempdf['ClosePrice'],0)].rolling(1000).sum()

因为它将始终引用自身的值,该值始终介于高点和低点之间。

我的数据框大约有400万行,所以我需要快速计算。

任何帮助将不胜感激!

      ClosePrice  ClosePrice_high  ClosePrice_low
1000   0.00001875     0.0000189375    0.0000185625
1001   0.00001876     0.0000189476    0.0000185724
1002   0.00001868     0.0000188668    0.0000184932
1003   0.00001869     0.0000188769    0.0000185031
1004   0.00001864     0.0000188264    0.0000184536
1005   0.00001855     0.0000187355    0.0000183645
1006   0.00001859     0.0000187759    0.0000184041
1007   0.00001862     0.0000188062    0.0000184338
1008   0.00001875     0.0000189375    0.0000185625
1009   0.00001868     0.0000188668    0.0000184932
1010  0.00001867     0.0000188567    0.0000184833
1011  0.00001862     0.0000188062    0.0000184338
1012  0.00001859     0.0000187759    0.0000184041
1013  0.00001867     0.0000188567    0.0000184833
1014  0.00001871     0.0000188971    0.0000185229
1015  0.00001881     0.0000189981    0.0000186219
1016  0.00001879     0.0000189779    0.0000186021
1017  0.00001877     0.0000189577    0.0000185823
1018  0.00001878     0.0000189678    0.0000185922
1019  0.00001875     0.0000189375    0.0000185625

1 个答案:

答案 0 :(得分:0)

在不太可能的情况下,我正确理解了这个问题:

df['cpl'] = df.ClosePrice_low.rolling(1000).max()
df['cph'] = df.ClosePrice_high.rolling(1000).min()
df = df[(df.ClosePrice <= df.cph) & (df.ClosePrice >= df.cpl)]
df.drop(['cpl', 'cph'], inplace=True)
df.sum()