5

我正在尝试将关卡附加到 Pandas 系列。说创建一个简单的系列:

 series = pd.Series(range(10), index = list("ABCDEFGHIJ"))

series有一个单一的索引级别。我想添加第二个级别。使用 DataFrame,您可以DataFrame.set_index稍微干净地执行此操作。但是,如果不先将我的系列转换为 DataFrame,我想出的最简单的方法是:

 index =  [np.array(["L2" for x in series.index]), np.array(series.index)]     
 series2 = pd.Series(series.tolist(), index = index)

series2现在有一个具有两个级别的多索引。

有没有更简单和更清洁的方法?

4

2 回答 2

4

不确定这是否更清洁;有一个MultiIndex类可用于构造层次索引:

>>> import pandas as pd
>>> series = pd.Series(range(10), index = list("ABCDEFGHIJ"))

创建一个新对象,重用原始series索引:

>>> pd.Series(xrange(10), 
              pd.MultiIndex.from_tuples([('L2', a) for a in series.index]))
L2  A    0
    B    1
    C    2
    D    3
    E    4
    F    5
    G    6
    H    7
    I    8
    J    9
dtype: int64

或者也可以就地更改系列:

>>> import pandas as pd
>>> series = pd.Series(range(10), index = list("ABCDEFGHIJ"))
>>> series.index = pd.MultiIndex.from_tuples([('L2', a) for a in series.index])

或者只是从一个MultiIndex完全开始:

>>> import pandas as pd
>>> series = pd.Series(range(10), index=pd.MultiIndex.from_tuples(
                                        [('L2', x) for x in 'ABCDEFGHIJ']))
于 2013-10-29T15:58:29.130 回答
3

一个简单的方法(就地)是:

series.index = pd.MultiIndex.from_product([['L2'], series.index])

编辑还有另一种方法可以做同样的事情(不是就地):

series2 = pd.concat([series], keys=['L2'])

于 2017-11-29T13:16:05.047 回答