我需要在groupby之后创建一个数据框。 groupby汇总每个(元组)键的摘要(平均值,最大值)。我需要拆分键以使用每个值的(index,column)建立一个新表。
import numpy as np
import pandas as pd
data = {
'X':np.random.randint(0,high=10,size=100),
'S':np.random.randint(0,high=5,size=100),
'V': np.random.randint(0,high=10,size=100)}
df=pd.DataFrame.from_dict(data)
agg =df.groupby(by=['X','S'])['V'].agg(['mean','max'])
obs = pd.DataFrame(index=df.X.unique(),columns=pd.MultiIndex.from_product([df.S.unique(),['mean','max']]))
for idx, row in agg.iterrows():
obs.loc[idx[0],(idx[1],'mean')] = row['mean']
obs.loc[idx[0],(idx[1],'max')] = row['max']
我只是通过遍历行找到了方法。我认为可能会有更好的方法。
obs
Out[218]:
3 1 2 0 4
mean max mean max mean max mean max mean max
0 5 7 3 3 1 1 6 8 4.2 8
9 2 3 6.25 9 4.2 6 7.5 8 3 3
3 NaN NaN NaN NaN 3.33333 6 3.5 5 3.33333 7
1 5 9 3 9 4.5 7 0 0 4.66667 9
4 2.75 8 0 0 7 7 4 6 9 9
7 5 9 4 8 2.66667 4 4 4 4 4
6 2.5 4 7 7 7 7 4 8 7.25 9
2 5 6 NaN NaN 3.5 5 9 9 3 3
5 4 4 8.5 9 4.5 9 6 6 8 8
8 5.66667 7 6 8 7 7 6 6 5.5 9