Как найти для каждого значения pd.Series сколько из предшествующих 10 значений = ему?

Создаю серию из 100 случайных значений.

import pandas as pd  
import numpy as np   
np.random.seed(123)
m = pd.Series(np.random.rand(100).round(1))

Для каждого значения находим сколько из предшествующих 10 значений равнялись ему.

Пыталась так, всегда выдает 10:

m.rolling(10).apply(lambda x: x.eq(m).sum())

Ответы (1 шт):

Автор решения: strawdog

Вы несколько неверно понимаете работу метода rolling. я бы порекомендовал сделать так:

import pandas as pd  
import numpy as np   
np.random.seed(123)
m = pd.Series(np.random.rand(100).round(1))

def my_func(s):
    return sum(s == s.iloc[-1])-1

res = m.rolling(10).agg(lambda rows: my_func(rows))
print(res)
0     NaN
1     NaN
2     NaN
3     NaN
4     NaN
5     NaN
6     NaN
7     NaN
8     NaN
9     1.0
10    1.0
11    2.0
12    2.0
13    0.0
14    3.0
15    2.0
16    0.0
...
85    0.0
86    1.0
87    0.0
88    1.0
89    2.0
90    1.0
91    0.0
92    3.0
93    1.0
94    0.0
95    1.0
96    0.0
97    2.0
98    1.0
99    0.0
→ Ссылка