Каким образом один поднабор данных в пирамиде данных датируется месячными конечными точками? - PullRequest
0 голосов
/ 03 июля 2019

Я уверен, что это действительно простая проблема, поэтому я ценю вашу помощь и терпение, так как я новичок в программировании на Python. У меня есть простой фрейм данных временных рядов с ежедневным индексом даты и столбцом значений. Я хочу разместить этот фрейм данных на конечных точках за месяц, например 31 января, 28 февраля, 31 марта и т. Д. Однако я не уверен, как это сделать.

Я знаком с эквивалентной функцией в R с пакетом xts:

mends_xts <- my_xts[endpoints(my_xts, on = 'months')]

Однако я не знаком с функцией python и изо всех сил пытаюсь найти эквивалент в Интернете.

Вот мой пример кадра данных временных рядов панд:

idx = pd.date_range('2018-01-01', periods=100, freq='D')
ts = pd.Series(range(len(idx)), index=idx)
ts_sub = ts[....] # I am really unsure what to put in this part to subset the dates

Я ожидаю, что результат будет выглядеть так:

2018-01-31 30

2018-02-28 58

2018-03-31 89

Еще раз спасибо за помощь заранее:)

Ответы [ 2 ]

0 голосов
/ 03 июля 2019

Вы можете просто использовать resample:

ts_sub = ts.resample('M')

Но вы получите значение даже для неполного месяца

2018-01-31    30
2018-02-28    58
2018-03-31    89
2018-04-30    99
Freq: M, dtype: int64

Если вы не хотите этого, вы можете извлечьсоответствующие индексы:

ts_sub = ts.loc[pd.date_range(ts.index.min(), ts.index.max(), freq='M')]
0 голосов
/ 03 июля 2019

Конец месяца можно получить с помощью строки частоты M:

idx1 = pd.date_range('2018-01-01', periods=3, freq='M')
ts_sub = ts[ts=idx1]

Выход:

2018-01-31    30
2018-02-28    58
2018-03-31    89
...