Подсчет различных строк в скользящем окне включает NaN с использованием панд - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы использовать скользящий счет с максимальным значением 36, которое должно включать значение NaN, например, начинаться с 0, если это NaN. У меня есть датафрейм, который выглядит так:

Введите:

val
NaN
 1
 1
NaN
 2
 1
 3
NaN
 5

Код:

b = a.rolling(36,min_periods=1).apply(lambda x: len(np.unique(x))).astype(int)

Это дает мне:

Val     count
NaN       1
 1        2
 1        2
NaN       3
 2        4
 1        4
 3        5
NaN       6
 5        7

Ожидаемый результат:

Val     count
NaN       0
 1        1
 1        1
NaN       1
 2        2
 1        2
 3        3
NaN       3
 5        4

1 Ответ

0 голосов
/ 01 мая 2018

Вы можете просто отфильтровать nan

df.val.rolling(36,min_periods=1).apply(lambda x: len(np.unique(x[~np.isnan(x)]))).fillna(0)
Out[35]: 
0    0.0
1    1.0
2    1.0
3    1.0
4    2.0
5    2.0
6    3.0
7    3.0
8    4.0
Name: val, dtype: float64

Причина, по которой

np.unique([np.nan]*2)
Out[38]: array([nan, nan])

np.nan==np.nan
Out[39]: False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...