Индексирование данных временных рядов с использованием панд или numpy
Ниже мои данные OHLC за 1 минуту.
2011-11-01,9:00:00,248.50,248.95,248.20,248.70
2011-11-01,9:01:00,248.70,249.00,248.65,248.85
2011-11-01,9:02:00,248.90,249.25,248.70,249.15
...
2011-11-01,15:03:00,250.25,250.30,250.05,250.15
2011-11-01,15:04:00,250.15,250.60,250.10,250.60
2011-11-01,15:15:00,250.55,250.55,250.55,250.55
2011-11-02,9:00:00,245.55,246.25,245.40,245.80
2011-11-02,9:01:00,245.85,246.40,245.75,246.35
2011-11-02,9:02:00,246.30,246.45,245.75,245.80
2011-11-02,9:03:00,245.75,245.85,245.30,245.35
...
Я загрузил данные и вот данные:
2 3 4 5
0_1
2011-11-01 09:00:00 248.50 248.95 248.20 248.70
2011-11-01 09:01:00 248.70 249.00 248.65 248.85
2011-11-01 09:02:00 248.90 249.25 248.70 249.15
2011-11-01 09:03:00 249.20 249.60 249.10 249.60
2011-11-01 09:04:00 249.55 249.95 249.50 249.60
Я хотел бы добавить 4 столбца, как показано ниже, чтобы использовать groupby:
2 3 4 5 year month day time
0_1
2011-11-01 09:00:00 248.50 248.95 248.20 248.70 0 0 0 0
2011-11-01 09:01:00 248.70 249.00 248.65 248.85 0 0 0 1
2011-11-01 09:02:00 248.90 249.25 248.70 249.15 0 0 0 2
2011-11-01 09:03:00 249.20 249.60 249.10 249.60 0 0 0 3
2011-11-01 09:04:00 249.55 249.95 249.50 249.60 0 0 0 4
....
2011-11-02 09:00:00 248.50 248.95 248.20 248.70 0 0 1 0
2011-11-02 09:01:00 248.70 249.00 248.65 248.85 0 0 1 1
2011-11-02 09:02:00 248.90 249.25 248.70 249.15 0 0 1 2
2011-11-02 09:03:00 249.20 249.60 249.10 249.60 0 0 1 3
2011-11-02 09:04:00 249.55 249.95 249.50 249.60 0 0 1 4
Как я могу добавить такие столбцы индекса?
Заранее спасибо.
1 ответ
Решение
Вы можете сделать это с помощью relativedelta
функция от dateutil
библиотека.
from dateutil.relativedelta import relativedelta
start = df.index[0]
def func(item):
delta = relativedelta(item, start)
return (delta.years, delta.months, delta.days)
>>>> pd.DataFrame(list(df.index.map(func)),
index=df.index, columns=['year', 'month', 'day'])
year month day
0_1
2011-11-01 09:00:00 0 0 0
2011-11-01 09:01:00 0 0 0
2011-11-01 09:02:00 0 0 0
2011-11-01 15:03:00 0 0 0
2011-11-01 15:04:00 0 0 0
2011-11-01 15:15:00 0 0 0
2011-11-02 09:00:00 0 0 1
2011-11-02 09:01:00 0 0 1
2011-11-02 09:02:00 0 0 1
2011-11-02 09:03:00 0 0 1
После этого вы можете объединить это с вашим DataFrame в индексе.
Я не знаю что time
колонка представляет хоть? Минуты?