Как найти для каждого значения 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