rolling_apply . 5, , .
lambda ( ) , .
df = pd.DataFrame({'price': [50, 51, 52, 50.5, 51, 50, 50.5, 53, 52, 49, 51]})
window = 5 # Given that sample data only contains 11 values.
df['price_count'] = pd.rolling_apply(df.price, window,
lambda group: sum(group[:-1] > group[-1]))
>>> df
price price_count
0 50.0 NaN
1 51.0 NaN
2 52.0 NaN
3 50.5 NaN
4 51.0 1
5 50.0 4
6 50.5 2
7 53.0 0
8 52.0 1
9 49.0 4
10 51.0 2
0-4. , :
group = df.price[:window].values
>>> group
array([ 50. , 51. , 52. , 50.5, 51. ])
:
>>> group[:-1] > group[-1]
array([False, False, True, False], dtype=bool)
:
>>> sum(group[:-1] > group[-1])
1
, 4.