У меня есть следующий образец Dataframe (строки заполнения 100k +):
In:
official delta
0 0.000201567
0 0.000194400
0 0.000151906
62.94957331 0.000144387
64.06471633 0.000125152
64.51335098 0.000133459
64.4101024 0.000120795
0 0.000146456
, но я получаю следующий вывод:
official delta result
0 0.000201567 0
0 0.0001944 0
0 0.000151906 0
62.94957331 0.000144387 0
64.06471633 0.000125152 0
64.51335098 0.000133459 0
64.4101024 0.000120795 0
0 0.000146456 0
DesiredРешение:
official delta result
0 0.000201567 0
0 0.0001944 0
0 0.000151906 0
62.94957331 0.000144387 62.94957331
64.06471633 0.000125152 64.06471633
64.51335098 0.000133459 64.51335098
64.4101024 0.000120795 64.4101024
0 0.000146456 63.76600137
Я попробовал следующий код, хотя кажется, что он работает неправильно.Я не понимаю, почему это дает результат ошибки.Когда я выполняю его в демонстрационном фрейме данных, все в порядке.
Код должен выбрать «официальный» элемент, когда маска имеет значение True, в противном случае умножить его предыдущий элемент на 0,99.Проблема здесь в том, что когда маска имеет значение True, код не выбирает «официальный» элемент.
mask = (df['official']<51) & (df['delta']>0)
df['result'] = df['official'].where(mask,0.99).groupby(~mask.cumsum()).cumprod()