繁体   English   中英

堆叠MultiIndex的所有级别

[英]stack all levels of a MultiIndex

我有一个数据框:

index = pd.MultiIndex.from_product([['a', 'b'], ['A', 'B'], ['One', 'Two']])
df = pd.DataFrame(np.arange(16).reshape(2, 8), columns=index)
df

在此处输入图片说明

如何在不知道列有多少级的情况下堆叠MultiIndex所有级。

我希望结果看起来像这样:

0  a  A  One     0
         Two     1
      B  One     2
         Two     3
   b  A  One     4
         Two     5
      B  One     6
         Two     7
1  a  A  One     8
         Two     9
      B  One    10
         Two    11
   b  A  One    12
         Two    13
      B  One    14
         Two    15
dtype: int64

您可以首先找到len个级别,获取range并将其传递给stack

print (df.columns.nlevels)
3

print (list(range(df.columns.nlevels)))
[0, 1, 2]

print (df.stack(list(range(df.columns.nlevels))))
0  a  A  One     0
         Two     1
      B  One     2
         Two     3
   b  A  One     4
         Two     5
      B  One     6
         Two     7
1  a  A  One     8
         Two     9
      B  One    10
         Two    11
   b  A  One    12
         Two    13
      B  One    14
         Two    15
dtype: int32

如果命名索引级别,则可以使用名称列表,如下所示:

index = pd.MultiIndex.from_product(
    [['a', 'b'], ['A', 'B'], ['One', 'Two']], 
    names=['idx1', 'idx2', 'idx3']
)
df = pd.DataFrame(np.arange(16).reshape(2, 8), columns=index)
df.stack(index.names)

结果:

   idx1  idx2  idx3
0  a     A     One      0
               Two      1
         B     One      2
               Two      3
   b     A     One      4
               Two      5
         B     One      6
               Two      7
1  a     A     One      8
               Two      9
         B     One     10
               Two     11
   b     A     One     12
               Two     13
         B     One     14
               Two     15
dtype: int64

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM