Pandas: как сложить временные ряды в фрейм данных со столбцами времени?

#python-2.7 #pandas #time-series #dataframe

#python-2.7 #pandas #временные ряды #фрейм данных

Вопрос:

У меня есть временные ряды pandas с данными о минутных тиках:

 2011-01-01 09:30:00   -0.358525
2011-01-01 09:31:00   -0.185970
2011-01-01 09:32:00   -0.357479
2011-01-01 09:33:00   -1.486157
2011-01-01 09:34:00   -1.101909
2011-01-01 09:35:00   -1.957380
2011-01-02 09:30:00   -0.489747
2011-01-02 09:31:00   -0.341163
2011-01-02 09:32:00    1.588071
2011-01-02 09:33:00   -0.146610
2011-01-02 09:34:00   -0.185834
2011-01-02 09:35:00   -0.872918
2011-01-03 09:30:00    0.682824
2011-01-03 09:31:00   -0.344875
2011-01-03 09:32:00   -0.641186
2011-01-03 09:33:00   -0.501414
2011-01-03 09:34:00    0.877347
2011-01-03 09:35:00    2.183530
  

Каков наилучший способ сложить его в фрейм данных, например :

              09:30:00    09:31:00    09:32:00    09:33:00    09:34:00    09:35:00
2011-01-01  -0.358525   -0.185970   -0.357479   -1.486157   -1.101909   -1.957380
2011-01-02  -0.489747   -0.341163    1.588071   -0.146610   -0.185834   -0.872918
2011-01-03   0.682824   -0.344875   -0.641186   -0.501414    0.877347    2.183530
  

Ответ №1:

Я бы убедился, что это действительно то, что вы хотите сделать, поскольку результирующий df теряет большую часть приятных функций временных рядов, которые есть у pandas.

Но вот некоторый код, который бы это выполнил. Сначала добавляется столбец времени, а индекс устанавливается только на часть даты DatetimeIndex. pivot Команда изменяет форму данных, устанавливая времена в виде столбцов.

 In [74]: df.head()
Out[74]: 
                        value
date                         
2011-01-01 09:30:00 -0.358525
2011-01-01 09:31:00 -0.185970
2011-01-01 09:32:00 -0.357479
2011-01-01 09:33:00 -1.486157
2011-01-01 09:34:00 -1.101909

In [75]: df['time'] = df.index.time
In [76]: df.index = df.index.date

In [77]: df2 = df.pivot(index=df.index, columns='time')
  

Фрейм данных результатов будет иметь мультииндекс для столбцов (верхний уровень — это просто имя вашей переменной values). Если вы хотите, чтобы это был просто список столбцов, приведенный ниже код сгладит список столбцов.

 In [78]: df2.columns = [c for (_, c) in df2.columns]

In [79]: df2
Out[79]: 
            09:30:00  09:31:00  09:32:00  09:33:00  09:34:00  09:35:00
2011-01-01 -0.358525 -0.185970 -0.357479 -1.486157 -1.101909 -1.957380
2011-01-02 -0.489747 -0.341163  1.588071 -0.146610 -0.185834 -0.872918
2011-01-03  0.682824 -0.344875 -0.641186 -0.501414  0.877347  2.183530