我有一个DataFrame
,它是多级的,有2个名为Outer Groups, Inner Numbers
的级别。我想更改Inner Numbers
的索引。
outside='g1 g1 g1 g2 g2 g2'.split()
inside='1 2 3 1 2 3'.split()
hier_index=list(zip(outside,inside))
hier_index= pd.MultiIndex.from_tuples(hier_index)
df=pd.DataFrame(np.random.randn(6,3), hier_index, ['a','b','c'])
df.index.names = ['Outer Group', 'Inner Numbers']
因此我的DataFrame具有外部g1, g2
和内部1,2,3 1,2,3
。我想更改名称
我正在尝试学习的这些。我不希望有任何捷径,我想学习的是如何
g1,g2
更改为X,Y
g1(123)
-> X(a,b,c)
Outer Groups
-> Level 1
和Inner Numbers -> Level 2
答案 0 :(得分:2)
您可以将rename
与字典配合使用并指定级别,因为可以使用DataFrame.rename_axis
来更改索引名称:
df = df.rename({'g1':'X','g2':'Y'}, level=0)
df = df.rename({'1':'a','2':'b', '3':'c'}, level=1)
df = df.rename_axis(['Level 1','Level 2'])
print (df)
a b c
Level 1 Level 2
X a -1.085631 0.997345 0.282978
b -1.506295 -0.578600 1.651437
c -2.426679 -0.428913 1.265936
Y a -0.866740 -0.678886 -0.094709
b 1.491390 -0.638902 -0.443982
c -0.434351 2.205930 2.186786
或通过MultiIndex.from_product
创建新的MultiIndex
并重新分配(新级别的两个列表的长度都必须与原始长度相同)
mux = pd.MultiIndex.from_product([['X','Y'], ['a','b','c']], names=['Level 1','Level 2'])
df.index = mux
print (df)
a b c
Level 1 Level 2
X a -1.085631 0.997345 0.282978
b -1.506295 -0.578600 1.651437
c -2.426679 -0.428913 1.265936
Y a -0.866740 -0.678886 -0.094709
b 1.491390 -0.638902 -0.443982
c -0.434351 2.205930 2.186786