Я думаю, что наиболее удобный способ - отбросить значения, которые могут привести к вводящим в заблуждение результатам.
Сначала создайте примерный ряд данных с днями в качестве индекса:
periods = 10000
my_index = pd.date_range('2016-07-01', periods=periods, freq='D')
data = np.random.randint(100,1000,periods)
ts = pd.Series(data=data, index=my_index, name='Daily Returns')
print(ts.head())
Пример рядавыглядит следующим образом: Вопрос 1:
2016-07-01 348
2016-07-02 794
2016-07-03 650
2016-07-04 365
2016-07-05 291
Freq: D, Name: Monthly Returns, dtype: int64
При назначении значения nan в начале,
ts.iloc[0]=np.nan
Затем выполните повторную выборку Серии.«BMS» обозначает первый рабочий день.'backfill ()', чтобы избежать предвзятого предвзятости.
ts=ts.resample('BMS').backfill().pct_change().dropna()
И в полученном ряду нет наблюдений за первый месяц и второй месяц, так как нет данных для расчета прибыли.
2016-09-01 0.257343
2016-10-03 -0.296997
2016-11-01 0.433544
2016-12-01 -0.552980
2017-01-02 -0.390123
Freq: BMS, Name: Monthly Returns, dtype: float64
Вопрос 2: Вставьте больше нанов и сделайте то же самое:
ts.iloc[500:9000]=np.nan
ts=ts.resample('BMS').backfill().pct_change().dropna()
Это пропустит месяцы нанов и связанные с ними доходы.