熊猫:如何将时间序列堆叠到具有时间列的数据框中?

时间:2014-06-25 00:40:05

标签: python-2.7 pandas time-series dataframe

我有一个带有分钟数据的熊猫时间序列:

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 个答案:

答案 0 :(得分: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')

结果数据框将具有列的MultiIndex(顶层只是值变量的名称)。如果您想将其恢复为列列表,则下面的代码将使列列表变平。

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