如何在数据帧上应用堆栈功能后访问列?
例如,如果我有一个数据框,例如:
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
然而,这些新列没有名称,我似乎无法找到访问它们的方法。
答案 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.]