计算数据帧内的均值并保持旧的索引python

时间:2018-02-13 20:08:56

标签: python python-2.7 dataframe indexing

我在下面的代码中遇到问题

import pandas as pd


df = pd.DataFrame()
Fun1 = ['A','A','A','A','A','A','A','A','A','A','A','A','B',
        'B','B','B','B','B','B','B','B','B','B','B']
Fun2 = ['1','1','1','2','2','2','2','3','3','4','4','4','1',
        '1','2','2','2','2','2','3','3','3','3','4']
time = ['X','X','X','X','Y','Y','Y','Y','Z','Z','Z','Z','X',
        'X','X','X','Y','Y','Y','Y','Z','Z','Z','Z']
X = [1,5,3,3,4,3,1,5,3,3,4,3,4,1,1,5,4,3,4,1,5,4,3,4]
Y = [2,3,4,1,1,5,2,3,4,1,1,5,3,3,4,3,4,1,1,5,3,5,1,2]
df = df.assign(Fun1=Fun1,Fun2=Fun2,time=time,X=X,Y=Y)
df = df.set_index(['Fun1', 'Fun2'])

for (index, group) in df.groupby('Fun2'):

    dfx = group.groupby('time')['X','Y'].mean()  

我的数据框dfx正在被time编入索引,我需要它来保留之前的旧多索引。

有没有办法在数据框内执行平均值并保留旧索引?

期望的输出

                        X    Y  time
Fun1    Fun2
A          1           x1   y1   X
B          1           x2   y2   X
A          2           x3   y3   Z
...

将x1,y1等平均值或每个多指数

1 个答案:

答案 0 :(得分:1)

不,您无法使用当前代码保留旧MultiIndex结果:它没有意义,因为您在各个级别进行汇总。

但是,只要您还在Fun1上分组,就可以保留Fun1

df.reset_index()\
  .groupby(['Fun1', 'Fun2', 'time'])\
  .mean()\
  .reset_index(level=-1)

          time         X         Y
Fun1 Fun2                         
A    1       X  3.000000  3.000000
     2       X  3.000000  1.000000
     2       Y  2.666667  2.666667
     3       Y  5.000000  3.000000
     3       Z  3.000000  4.000000
     4       Z  3.333333  2.333333
B    1       X  2.500000  3.000000
     2       X  3.000000  3.500000
     2       Y  3.666667  2.000000
     3       Y  1.000000  5.000000
     3       Z  4.000000  3.000000
     4       Z  4.000000  2.000000