Pandas resample и заполнить листья NaN в конце - PullRequest
0 голосов
/ 29 января 2019

Я хочу увеличить частоту с еженедельной до ежедневной частоты, заполнив результат вперед.

Если бы последнее наблюдение моей исходной серии было NaN, я бы ожидал, что это значение будет замененопредыдущим действительным значением, но вместо этого оно остается как NaN.

НАСТРОЙКА

import numpy as np
import pandas as pd

all_dates = pd.date_range(start='2018-01-01', freq='W-WED', periods=4)

ts = pd.Series([1, 2, 3], index=all_dates[:3])
ts[all_dates[3]] = np.nan

ts
Out[16]: 
2018-01-03    1.0
2018-01-10    2.0
2018-01-17    3.0
2018-01-24    NaN
Freq: W-WED, dtype: float64

РЕЗУЛЬТАТ

ts.resample('B').ffill() 

ts.resample('B').ffill()
Out[17]: 
2018-01-03    1.0
2018-01-04    1.0
2018-01-05    1.0
2018-01-08    1.0
2018-01-09    1.0
2018-01-10    2.0
2018-01-11    2.0
2018-01-12    2.0
2018-01-15    2.0
2018-01-16    2.0
2018-01-17    3.0
2018-01-18    3.0
2018-01-19    3.0
2018-01-22    3.0
2018-01-23    3.0
2018-01-24    NaN
Freq: B, dtype: float64

Пока я ожидал, что последнее значение будет также 3.

У кого-нибудь есть объяснение этого поведения?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

resample() возвращает DatetimeIndexResampler

Вам необходимо вернуть оригинальные панды Series.

Вы можете использовать метод asfreq(), чтобы сделать это, прежде чем заполнять Nanhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.asfreq.html.

Итак, это должно работать:

ts.resample('B').asfreq().ffill()

0 голосов
/ 29 января 2019

Смысл повторной выборки и ffill заключается в том, чтобы просто распространяться вперед с первого дня недели - если первый день недели равен NaN, это то, что заполняется вперед.Например:

ts.iloc[1] = np.nan
ts.resample('B').ffill()

2018-01-03    1.0
2018-01-04    1.0
2018-01-05    1.0
2018-01-08    1.0
2018-01-09    1.0
2018-01-10    NaN
2018-01-11    NaN
2018-01-12    NaN
2018-01-15    NaN
2018-01-16    NaN
2018-01-17    3.0
2018-01-18    3.0
2018-01-19    3.0
2018-01-22    3.0
2018-01-23    3.0
2018-01-24    NaN
Freq: B, dtype: float64

В большинстве случаев распространение данных за предыдущую неделю будет , а не желаемым поведением.Если вы хотите использовать данные предыдущих недель в случае пропущенных значений в исходном (недельном) ряду, просто fillna для этого первого с ffill.

...