2016-09-15 2 views
2

считает DateTimeIndexdatesпродлить панда datetimeindex на 1 период

dates = pd.date_range('2016-01-29', periods=4, freq='BM') 
dates 

DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29'], 
       dtype='datetime64[ns]', freq='BM') 

Я хочу продлить индекс на один период на частоте, привязанной к объекту.


Я ожидаю

pd.date_range('2016-01-29', periods=5, freq='BM') 

DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29', 
       '2016-05-31'], 
       dtype='datetime64[ns]', freq='BM') 

Я попытался

dates.append(dates[[-1]] + pd.offsets.BusinessMonthEnd()) 

Однако

  • Не обобщенную использовать частоту dates
  • я получаю предупреждение производительность

    PerformanceWarning: Non-векторизованную DateOffset применяется к серии или DatetimeIndex

ответ

6

Метки времени в вашем DatetimeIndex уже знают, что они описывают бизнес-месяц заканчивается, так что вы можете просто добавить 1:

import pandas as pd 
dates = pd.date_range('2016-01-29', periods=4, freq='BM') 

print(repr(dates[-1])) 
# => Timestamp('2016-04-29 00:00:00', offset='BM') 

print(repr(dates[-1] + 1)) 
# => Timestamp('2016-05-31 00:00:00', offset='BM') 

Вы можете добавить последний к вашему индексу, используя .union:

dates = dates.union([dates[-1] + 1]) 
print(dates) 
# => DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29', 
#     '2016-05-31'], 
#     dtype='datetime64[ns]', freq='BM') 

По сравнению с .append, это сохраняет информацию о смещении.

+0

Очень хорошее и аккуратное решение! – MaxU

1

попробовать это:

In [207]: dates = dates.append(pd.DatetimeIndex(pd.Series(dates[-1] + pd.offsets.BusinessMonthEnd()))) 

In [208]: dates 
Out[208]: DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29', '2016-05-31'], dtype='datetime64[ns]', freq=None) 

или с помощью list ([...]) вместо pd.Series():

In [211]: dates.append(pd.DatetimeIndex([dates[-1] + pd.offsets.BusinessMonthEnd()])) 
Out[211]: DatetimeIndex(['2016-01-29', '2016-02-29', '2016-03-31', '2016-04-29', '2016-05-31'], dtype='datetime64[ns]', freq=None) 
Смежные вопросы