/ / Pandasシリーズインデックスへのレベルの追加 - python、pandas

Pandas Series Indexにレベルを追加する - python、pandas

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 今2つのレベルを持つマルチインデックスを持っています。

これに対するもっと簡単でクリーンなアプローチはありますか?

回答:

回答№1の場合は3

これがずっときれいかどうかわからない。あります 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"]))

回答№2の場合は1

簡単な方法は(インプレース)です。

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

EDIT 同じことをする別の方法もあります(インプレースではありません)。

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