Почему pandas .interpolate () интерполирует отдельные значения, окруженные NaN? - PullRequest
1 голос
/ 19 января 2020

У меня проблема с pandas interpolate (). Я хочу интерполировать только тогда, когда есть не более 2 последовательных "np.nans". Но функция интерполяции пытается также интерполировать отдельные значения, когда существует более 2 np.nans!?

s = pd.Series(data = [np.nan,10,np.nan,np.nan,np.nan,5,np.nan,6,np.nan,np.nan,30])
a = s.interpolate(limit=2,limit_area='inside')
print(a)

вывод, который я получаю:

0       NaN
1     10.00
2      8.75
3      7.50
4       NaN
5      5.00
6      5.50
7      6.00
8     14.00
9     22.00
10    30.00
dtype: float64

Я не хочу результат в строках 2 и 3. Что я хочу:

0       NaN
1     10.00
2       NaN
3       NaN
4       NaN
5      5.00
6      5.50
7      6.00
8     14.00
9     22.00
10    30.00
dtype: float64

Кто-нибудь может помочь, пожалуйста?

1 Ответ

0 голосов
/ 19 января 2020

Groupby.transform с Series.where

s_notna = s.notna()
m = (s.groupby(s_notna.cumsum()).transform('size').le(3) | s_notna)    
s = s.interpolate(limit_are='inside').where(m)
print(s)

Выход

0      NaN
1     10.0
2      NaN
3      NaN
4      NaN
5      5.0
6      5.5
7      6.0
8     14.0
9     22.0
10    30.0
dtype: float64
...