在pandas数据帧上应用堆栈函数后访问列

时间:2014-08-24 01:02:59

标签: python pandas

如何在数据帧上应用堆栈功能后访问列?

例如,如果我有一个数据框,例如:

df11 = pd.DataFrame(np.random.randn(5,3),columns = [' a',' b',' c'] )

          a         b         c
0 -1.108734  0.458352 -1.567971
1  1.656508 -0.091190 -0.700334
2 -1.278772  0.034386  0.680842
3  1.133447  0.710459 -0.562747
4  0.563312 -0.346689 -0.883099

df11.stack()生成:

0  a   -1.108734
   b    0.458352
   c   -1.567971
1  a    1.656508
   b   -0.091190
   c   -0.700334
2  a   -1.278772
   b    0.034386
   c    0.680842
3  a    1.133447
   b    0.710459
   c   -0.562747
4  a    0.563312
   b   -0.346689
   c   -0.88309

然而,这些新列没有名称,我似乎无法找到访问它们的方法。

1 个答案:

答案 0 :(得分:0)

那是因为不是任何列;它们现在是系列的MultiIndex级别:

>>> s.index
MultiIndex(levels=[[0, 1, 2, 3, 4], [u'a', u'b', u'c']],
           labels=[[0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]])

根据您需要的形式,有很多方法可以了解内部的内容:

>>> s.index.get_values()
array([(0L, 'a'), (0L, 'b'), (0L, 'c'), (1L, 'a'), (1L, 'b'), (1L, 'c'),
       (2L, 'a'), (2L, 'b'), (2L, 'c'), (3L, 'a'), (3L, 'b'), (3L, 'c'),
       (4L, 'a'), (4L, 'b'), (4L, 'c')], dtype=object)
>>> s.index.get_level_values(0)
Int64Index([0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype='int64')
>>> s.index.get_level_values(1)
Index([u'a', u'b', u'c', u'a', u'b', u'c', u'a', u'b', u'c', u'a', u'b', u'c', u'a', u'b', u'c'], dtype='object')

甚至:

>>> s.reset_index()
    level_0 level_1         0
0         0       a  1.419391
1         0       b  1.142944
2         0       c  0.413431
3         1       a  0.705091
4         1       b -1.846493
5         1       c -0.756824
[etc.]