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"])