Как создать серию год-месяц для использования в качестве индекса в фрейме данных pandas? - PullRequest
0 голосов
/ 14 сентября 2018

Я хотел бы начать с месяца 2019-01, а затем добавить любое количество последовательных месяцев и использовать его в качестве индекса в кадре данных панд. Я нашел предложения, которые указывают на использование pd.to_timedelta, но я продолжаю сталкиваться с проблемами.

Вот подробности:

Если вы начнете с даты и добавите 5 периодов, например:

import pandas as pd
import numpy as np

date = pd.to_datetime("1st of Jan, 2019")
dates = date+pd.to_timedelta(np.arange(5), 'M')

Тогда вы получите:

DatetimeIndex(['2019-01-01 00:00:00', '2019-01-31 10:29:06',
               '2019-03-02 20:58:12', '2019-04-02 07:27:18',
               '2019-05-02 17:56:24'],
              dtype='datetime64[ns]', freq=None)

Вы можете легко удалить части дня и времени, а также удалить дубликаты для обработки двойного 2019-01, например:

dates = dates.map(lambda x: x.strftime('%Y-%m'))
dates = dates.drop_duplicates()

Но, как видите, 2019-02 отсутствует:

Index(['2019-01', '2019-03', '2019-04', '2019-05'], dtype='object')

Как лучше это сделать?

Ответы [ 2 ]

0 голосов
/ 14 сентября 2018

Вы можете создать PeriodIndex с помощью period_range:

dates = pd.period_range(date, periods=5, freq='M')
print (dates)
PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05'], 
            dtype='period[M]', freq='M')

Ваше решение должно работать, если добавить 2 дня:

dates = (date + pd.to_timedelta(np.arange(5), unit='M') + pd.Timedelta(2, unit='d')).strftime('%Y-%m')

print (dates)
Index(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05'], dtype='object')

Проверьте:

dates = (date + pd.to_timedelta(np.arange(120), unit='M') + pd.Timedelta(2, unit='d'))
        .month.value_counts()

print (dates)

12    10
11    10
10    10
9     10
8     10
7     10
6     10
5     10
4     10
3     10
2     10
1     10
dtype: int64
0 голосов
/ 14 сентября 2018

Вы можете использовать pandas.date_range:

pd.date_range(date, periods=5, freq='M').strftime('%Y-%m')

[вне]

Index(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05'], dtype='object')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...