考虑以下数据框:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'split_1':[1,2,2,2,1,2,2,2,1,1],
'split_2':[3,3,3,4,4,4,4,3,3,3],
'var_1':[1,2,4,3,2,4,2,2,1,2],
'var_2':[4,2,2,2,1,5,4,3,4,3],
})
我想要获得的是类似(或完全)类似的表格:
通过使用groupby和agg方法,我走得很远。
grp = df.groupby(['split_1','split_2'])
tab1 = grp['var_1'].agg([np.mean, np.median, np.max, np.min, np.size])
tab2 = grp['var_2'].agg([np.mean, np.median, np.max, np.min, np.size])
tab = tab1.append(tab2)
这看起来像是hackish ......我似乎无法找到一种方式(或在文档中查找的正确位置)以我想要的方式正确地分组和聚合数据。
有没有正确的方法?
答案 0 :(得分:4)
这可能有点清洁:
In [15]: grp = df.groupby(['split_1','split_2'])
In [16]: grp.agg([np.mean, np.median, np.max, np.min, np.size]).stack(0)
Out[16]:
mean median amax amin size
split_1 split_2
1 3 var_1 1.333333 1 2 1 3
var_2 3.666667 4 4 3 3
4 var_1 2.000000 2 2 2 1
var_2 1.000000 1 1 1 1
2 3 var_1 2.666667 2 4 2 3
var_2 2.333333 2 3 2 3
4 var_1 3.000000 3 4 2 3
var_2 3.666667 4 5 2 3
基本上,不需要将这组函数分别应用于这两组,并将结果附加在一起。这基本上是分组所做的:分割,应用(单独)和组合。