скользящая сумма панд, если критерии выполнены, но критерии указаны в столбце - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь сделать скользящую сумму в 1000 строк. Я хочу суммировать все строки, где ClosePrice находится между ClosePrice_low и ClosePrice_high для каждой соответствующей строки и 999 над ней.

например:

скользящий счетчик 1000: проверить строки 0: 1000 и сумму, если между 0,0000189375 и 0,0000185625 (иначе найти все строки от 0 до 1000, которые находятся между ClosePrice_low и ClosePrice_high в строке 1000 и суммой 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()

потому что он всегда будет ссылаться на само значение, которое всегда находится между максимумом и минимумом.

Также мой фрейм данных составляет около 4 миллионов строк, поэтому мне нужно быстрое вычисление.

Любая помощь будет принята с благодарностью!

      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 голосов
/ 11 сентября 2018

В том маловероятном случае, если я правильно понимаю вопрос:

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()
...