首页 文章

在pandas中使用groupby时恢复分层列索引

提问于
浏览
3

我在pandas中使用 groupby 来计算数据中pandas中的一些聚合统计数据,其中数据框中的列使用分层索引进行组织 . 对于计算的统计数据,我想最后回到表格表格,其中组被重新转换为具有组值的列,例如,喜欢:

index = pd.MultiIndex.from_tuples([('A', 'a'), ('B', 'b')])
df = pd.DataFrame(np.random.randn(8,2), columns=index)

这导致例如这个数据框

A         B
          a         b
0  0.511157  0.334748
1  0.031113 -0.477456
2  0.288080 -0.258238
3  0.138467 -0.955547
4 -0.087873  0.017494
5 -0.667393  1.190039
6 -0.068245 -1.282864
7 -0.996982  0.589667

现在我使用groupby计算统计信息并重置索引以重新创建平面数据框:

df.groupby([('A','a')]).mean().reset_index()
     (A, a)         B
                    b
0 -0.996982  0.589667
1 -0.667393  1.190039
2 -0.087873  0.017494
3 -0.068245 -1.282864
4  0.031113 -0.477456
5  0.138467 -0.955547
6  0.288080 -0.258238
7  0.511157  0.334748

我怎样才能实现 ('A', 'a') 再次成为多指数的一部分,希望以自动方式?或者另有说明:有没有办法在groupby操作期间保留分层列结构 .

2 回答

  • 4

    对我来说,工作添加参数 as_index=Falsegroupby

    print df.groupby([('A','a')], as_index=False).mean()
              A         B
              a         b
    0 -0.765088 -0.556601
    1 -0.628040  2.074559
    2 -0.516396 -2.028387
    3 -0.152027  0.389853
    4  0.450218  1.474989
    5  0.718040 -0.882018
    6  1.932556 -0.977316
    7  2.028468 -0.875167
    
  • 2

    最简单的方法是重新分配原始列:

    In [182]:
    df1 = df.groupby([('A','a')]).mean().reset_index()
    df1.columns = df.columns
    df1
    
    Out[182]:
              A         B
              a         b
    0 -0.857465 -0.761948
    1 -0.263677  0.538251
    2  0.067710 -1.038906
    3  0.345584 -0.425514
    4  0.478200  0.119345
    5  0.639305  0.047526
    6  1.528260  1.956677
    7  3.114834 -0.532462
    

相关问题