Python Mulit-Index:更改索引名称的第二级

时间:2018-01-25 07:47:36

标签: python pandas dataframe multi-index

我有一个关于多列索引的一般问题。我想将名称第二级索引(nm)更改为&#ns; ns1'和&#ns; ns2'。看看下面我的df。

Out[13]: 
key  nm         0         1         2         3
bar abc -0.424972  0.567020  0.276232 -1.087401
    dse -0.673690  0.113648 -1.478427  0.524988
baz cws  0.404705  0.577046 -1.715002 -1.039268
    cwd -0.370647 -1.157892 -1.344312  0.844885
foo efw  1.075770 -0.109050  1.643563 -1.469388
    vqx  0.357021 -0.674600 -1.776904 -0.968914
qux zxe -1.294524  0.413738  0.276662 -0.472035
    res -0.013960 -0.362543 -0.006154 -0.923061

Out[13]: 
key  nm         0         1         2         3
bar ns1 -0.424972  0.567020  0.276232 -1.087401
    ns2 -0.673690  0.113648 -1.478427  0.524988
baz ns1  0.404705  0.577046 -1.715002 -1.039268
    ns2 -0.370647 -1.157892 -1.344312  0.844885
foo ns1  1.075770 -0.109050  1.643563 -1.469388
    ns2  0.357021 -0.674600 -1.776904 -0.968914
qux ns1 -1.294524  0.413738  0.276662 -0.472035
    ns2 -0.013960 -0.362543 -0.006154 -0.923061

注意到第二级索引名称已从所有随机字符串更改为&#ns; ns1'和&#ns; ns2'。是否有改变这种方式的pythonic方法?我的原始数据帧非常大,因此很难手动完成。谢谢!

1 个答案:

答案 0 :(得分:4)

MultiIndex.from_product创建新MultiIndex并分配回来:

df.index = pd.MultiIndex.from_product([df.index.levels[0], ['ns1','ns2']], 
                                      names=df.index.names)
print (df)
                0         1         2         3
key nm                                         
bar ns1 -0.424972  0.567020  0.276232 -1.087401
    ns2 -0.673690  0.113648 -1.478427  0.524988
baz ns1  0.404705  0.577046 -1.715002 -1.039268
    ns2 -0.370647 -1.157892 -1.344312  0.844885
foo ns1  1.075770 -0.109050  1.643563 -1.469388
    ns2  0.357021 -0.674600 -1.776904 -0.968914
qux ns1 -1.294524  0.413738  0.276662 -0.472035
    ns2 -0.013960 -0.362543 -0.006154 -0.923061

set_index类似的解决方案:

df = df.set_index(pd.MultiIndex.from_product([df.index.levels[0], ['ns1','ns2']], 
                                              names=df.index.names))
print (df)
                0         1         2         3
key nm                                         
bar ns1 -0.424972  0.567020  0.276232 -1.087401
    ns2 -0.673690  0.113648 -1.478427  0.524988
baz ns1  0.404705  0.577046 -1.715002 -1.039268
    ns2 -0.370647 -1.157892 -1.344312  0.844885
foo ns1  1.075770 -0.109050  1.643563 -1.469388
    ns2  0.357021 -0.674600 -1.776904 -0.968914
qux ns1 -1.294524  0.413738  0.276662 -0.472035
    ns2 -0.013960 -0.362543 -0.006154 -0.923061