Применяйте функцию по мере поступления в группе в пандах - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть датафрейм, который выглядит следующим образом.

           symbol    Range             
Date                                      
2018-08-16     spy    1.5
2018-08-17     spy    1.2
2018-08-16     spy    1.3
2018-08-17     spy    1.6
2017-07-17     spy    1.1
2017-07-18     spy    1.9
2018-08-16     nflx   4.5
2018-08-17     nflx   5.2

Я добавил столбец, который находит 15-й процентиль диапазона, выполнив следующее:

df['Range_quantile'] = df.groupby(['symbol'])['Range'].transform(lambda x: np.percentile(x.unique(), 15))

Начиная с данной строки, как применить ту же функцию только к последним 20 строкам (внутри группы) на скользящей основе, сгруппированных по symbol, а затем добавить выходные данные в виде столбца (Range_quantile_rolling) к кадру данных? Мой пример применяет функцию lambda x: np.percentile(x.unique(), 15) ко всему столбцу Range.

Например, если я добавляю функцию в последние 3 строки в groupby, она может выглядеть следующим образом:

         symbol    Range     Range_Quantile_Rolling_3        
Date                                      
2018-08-16     spy    1.5      NA
2018-08-17     spy    1.2      NA
2018-08-16     spy    1.3      1.21
2018-08-17     spy    1.6      1.25
2017-07-17     spy    1.1      1.15
2017-07-18     spy    1.9      1.3
2018-08-16     nflx   4.5      NA
2018-08-17     nflx   5.2      NA

1 Ответ

0 голосов
/ 14 сентября 2018

groupby и transform с lambda

df.assign(Range=df.groupby('symbol').Range.transform(
    lambda x: x.rolling(3).apply(lambda y: np.percentile(np.unique(y), 15))
))

           symbol  Range
Date                    
2018-08-16    spy    NaN
2018-08-17    spy    NaN
2018-08-16    spy   1.23
2018-08-17    spy   1.23
2017-07-17    spy   1.16
2017-07-18    spy   1.25
2018-08-16   nflx    NaN
2018-08-17   nflx    NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...