swaplevel() 和 reorder_levels() 有什么区别?

CAp*_*wda 2 python indexing pandas

在使用 pandas 的分层索引级别时,swaplevel()和 之间有什么区别reorder_levels()

WeN*_*Ben 5

当只有两个级别时swaplevel几乎reorder_levels相同,但是当你的 df 有超过 3 个级别时,个人认为reorder_levels是更优雅的方式

例如 :

idx = pd.MultiIndex.from_arrays([[1, 1, 2], [1, 2, 2], [3, 3, 3],[1,1,1]])
df = pd.DataFrame(columns=idx, index=[1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

如果我们想将订单级别=[0,1,2,3]更改为[3,2,1,0]

With swaplevel: 需要多次调用

df.swaplevel(0,3,axis=1).swaplevel(1,2,axis=1)
     1          
     3          
     1    2     
     1    1    2
1  NaN  NaN  NaN
2  NaN  NaN  NaN
3  NaN  NaN  NaN
4  NaN  NaN  NaN
Run Code Online (Sandbox Code Playgroud)

reorder_levels:仅一次调用

df.reorder_levels([3,2,1,0],axis=1)
     1          
     3          
     1    2     
     1    1    2
1  NaN  NaN  NaN
2  NaN  NaN  NaN
3  NaN  NaN  NaN
4  NaN  NaN  NaN
Run Code Online (Sandbox Code Playgroud)