Как условно сбросить начальное значение / строку скользящего максимума в пандах MultiIndex dataframe? - PullRequest
0 голосов
/ 04 октября 2018

У меня есть мультииндексный фрейм данных.Столбцы индекса: Date и Symbol.Я хочу сбросить строку, в которой датафрейм начинает оценивать rolling_max из number для каждого Symbol.Я хочу сделать это на основе столбца, содержащего True или False.Если condition равно True для Date, тогда rolling_max следует сбросить и рассчитать максимальное значение из этого Date.Если condition равно False, то rolling_max должно работать «нормально» - принимая максимум сегодняшнего и вчерашнего number для данного Symbol.Столбец condition не имеет никакого отношения к столбцу number (они не зависят друг от друга).Это ожидаемый результат:

                         number     condition     rolling_max
Date          Symbol     
1990-01-01    A          29         False         29
1990-01-01    B          7          False         7

1990-01-02    A          13         True          13 # Reset rolling max for 'A'
1990-01-02    B          2          False         7

1990-01-03    A          11         False         13
1990-01-03    B          52         True          52 # Reset rolling max for 'B'

1990-01-04    A          30         False         30
1990-01-04    B          1          False         52

1990-01-05    A          19         True          19 # Reset rolling max for 'A'
1990-01-05    B          65         False         65

1990-01-06    A          17         False         19
1990-01-06    B          20         True          20 # Reset rolling max for 'B'

Как я могу это сделать?

1 Ответ

0 голосов
/ 05 октября 2018

Я смог решить эту проблему.

df['rolling_max'] = df.groupby(['Symbol',df.groupby('Symbol')['condition'].cumsum()])['number'].cummax()
...