我正在尝试向 Pandas 系列添加一个级别。假设创建一个简单的系列:
series = pd.Series(range(10), index = list("ABCDEFGHIJ"))
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
series2现在有一个具有两个级别的多重索引。
有没有更简单、更干净的方法?
一个简单的方法(就地)是:
series.index = pd.MultiIndex.from_product([['L2'], series.index])
编辑还有另一种方法可以做同样的事情(不是就地):
series2 = pd.concat([series], keys=['L2'])
不确定这是否干净得多;有一个MultiIndex类可用于构造层次索引:
>>> import pandas as pd
>>> series = pd.Series(range(10), index = list("ABCDEFGHIJ"))
Run Code Online (Sandbox Code Playgroud)
创建一个新对象,重用原始索引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
Run Code Online (Sandbox Code Playgroud)
或者也可以就地更改系列:
>>> 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])
Run Code Online (Sandbox Code Playgroud)
或者只是从一个MultiIndex整体开始:
>>> import pandas as pd
>>> series = pd.Series(range(10), index=pd.MultiIndex.from_tuples(
[('L2', x) for x in 'ABCDEFGHIJ']))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4329 次 |
| 最近记录: |