Pandas,在多列索引上移动一个多索引

2024-09-29 02:19:20 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个数据帧的多级列和多级索引

column_level1               a1      | a2
                           ----+----|----+----
column_level2               b1 | b2 | b3 | b4

index1 | index2 | index3
-------+--------+--------+-----+----+----+-----
   0   |   c1   |   d1   |  1  |  2 |  3 |  4  |
   0   |   c2   |   d3   |  5  |  6 |  7 |  8  |    

如何重塑数据帧以将其中一个索引移动到列级别的顶部? 假设我希望,我的当前索引2被放在列\u level0上。在

我还需要一些有效的解决办法来解决这个问题。在

我目前的解决方案是按以下方式使用堆栈/取消堆栈:

^{pr2}$

但是在巨大的数据帧上使用这种实现,最终会消耗大量的RAM和花费大量的时间。在


Tags: 数据a2堆栈a1columnb2b1b3
1条回答
网友
1楼 · 发布于 2024-09-29 02:19:20

如果您有:

import numpy as np
import pandas as pd

columns = pd.MultiIndex.from_arrays([['a1','a1','a2','a2'], ['b1','b2','b3','b4']])
index = pd.MultiIndex.from_tuples([(0,'c1','d1'), (0, 'c2', 'd3')])
df = pd.DataFrame(np.arange(1,9).reshape(2,-1), columns=columns, index=index)
#         a1    a2   
#         b1 b2 b3 b4
# 0 c1 d1  1  2  3  4
#   c2 d3  5  6  7  8

然后您可以使用reorder_levels来避免(大多数)这些堆栈/取消堆栈调用:

^{pr2}$

收益率

      c1  c2  c1  c2  c1  c2  c1  c2
      a1  a1  a1  a1  a2  a2  a2  a2
      b1  b1  b2  b2  b3  b3  b4  b4
0 d1   1 NaN   2 NaN   3 NaN   4 NaN
  d3 NaN   5 NaN   6 NaN   7 NaN   8

相关问题 更多 >