我如何(或应该)将DataFrame的DataFrame转换为MultiIndexed DataFrame?

时间:2015-11-18 16:37:13

标签: python pandas

我有一个DataFrames系列的DataFrame,如下所示:

       state1            state2            state3            ...
       sym1  sym2  sym3  sym1  sym2  sym3  sym1  sym2  sym3  ...
date1  1     2     3     4     5     6     7     8     9     ...
date2  10    11    12    13    14    15    16    17    18    ...
date3  19    20    21    22    23    24    25    26    27    ...
...    ...   ...   ...   ...   ...   ...   ...   ...   ...   ...

state1state2等都是各州的数据框架。 sym1sym2等都是症状时间序列。这允许我做这样的事情:

>>> df['Alabama']['Chills']
2012-07-01     58
2012-07-02     64
2012-07-03     61
2012-07-04     23
2012-07-05     48
2012-07-06     63
2012-07-07     33
2012-07-08     55
2012-07-09     56
2012-07-10     39
2012-07-11     61
2012-07-12     28
2012-07-13     24
2012-07-14     51
2012-07-15     59
2012-07-16     75
2012-07-17     52
2012-07-18     61
2012-07-19     65
2012-07-20     40
2012-07-21     56
2012-07-22     13
2012-07-23     44
2012-07-24     23
2012-07-25     28
2012-07-26     29
2012-07-27     18
2012-07-28     16
2012-07-29     42
2012-07-30     53
             ...
2014-06-02    143
2014-06-03    133
2014-06-04    102
2014-06-05    139
2014-06-06    119
2014-06-07     74
2014-06-08    180
2014-06-09    136
2014-06-10    135
2014-06-11    106
2014-06-12     73
2014-06-13    102
2014-06-14     75
2014-06-15     57
2014-06-16    234
2014-06-17    143
2014-06-18    182
2014-06-19    115
2014-06-20    184
2014-06-21    171
2014-06-22     77
2014-06-23    211
2014-06-24    202
2014-06-25     95
2014-06-26    137
2014-06-27     98
2014-06-28    138
2014-06-29    165
2014-06-30    136
2014-07-01     43
Freq: D, Name: Chills, dtype: int64

但是,我不确定这是安排这样的数据的最佳方式。我在看MultiIndices,这可以让我做这样的事情:

state1  sym1  date1  1
              date2  10
              date3  19
        sym2  date1  2
              date2  11
              date3  20
        sym3  date1  3
              date2  12
              date3  21
state2  sym1  date1  4
              date2  13
              ...    ...

我有两个问题:

  1. 将当前数据结构转换为使用MultiIndices的新数据结构有什么好处?根据我的收集,您可以在单个DataFrame中有效地存储更高维度的数据,从而降低冗余/复杂性,从而可以在较小的数据结构上实现更快的操作。这是对的吗?
  2. 我究竟如何转换我已有的数据结构?
  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

对于第一个问题,我认为你是对的,加上Pandas为分层索引数据框提供了方便的索引方法,比如Slicers。

关于如何将数据结构转换为分层索引数据帧,首先,您需要将每个状态的数据帧合并在一起以形成水平结构,然后您可以使用转置和堆栈重新排列为垂直结构。

In [95]: df
Out[95]: 
      state1           state2           state3          
        sym1 sym2 sym3   sym1 sym2 sym3   sym1 sym2 sym3
0                                                       
date1      1    2    3      4    5    6      7    8    9
date2     10   11   12     13   14   15     16   17   18
date3     19   20   21     22   23   24     25   26   27

In [96]: df.T.stack()
Out[96]: 
state1  sym1  date1     1
              date2    10
              date3    19
        sym2  date1     2
              date2    11
              date3    20
        sym3  date1     3
              date2    12
              date3    21
state2  sym1  date1     4
              date2    13
              date3    22
        sym2  date1     5
              date2    14
              date3    23
        sym3  date1     6
              date2    15
              date3    24
state3  sym1  date1     7
              date2    16
              date3    25
        sym2  date1     8
              date2    17
              date3    26
        sym3  date1     9
              date2    18
              date3    27
dtype: int64