我在下面的代码中遇到问题
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等平均值或每个多指数
答案 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