数据分组官方文档
分组统计 - groupby功能
- 根据某些条件将数据拆分成组
- 对每个组单独使用函数
- 将结果合并到一个数据结构中
根据单列或多列分组 .groupby()
分组后的对象执行数值计算函数 .sum(),.mean()…
分组后对象同时使用多个函数 --agg()。
df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)
参数:
- by 标签(label)或标签列表
- axis 默认值为0
- level MultiIndex时有效
- as_index 布尔型值 默认是True – 使用grouped的标签作为index.若为False – grouped的标签仍为标签,会新生成0~n-1的index.
- sort 是否对grouped的标签排序
返回的是GroupBy 对象。通过list(),查看具体内容
df
经过group方法后,得到的是groupby对象,是一个中间数据,没有进行计算
a = df.groupby('A').mean()#单列整合
b = df.groupby(['A','B']).mean()#多列整合
c = df.groupby(['A'])['D'].mean() # 以A分组,算D的平均值.返回的是Series对象
- 使用list()将groupby对象变成列表对象,可查看具体内容
list(df.groupby('A'))
列表是两个元组对象。每个元组包含‘A’的标签名和相应的DataFrame或Series。
[('bar', A B C D
1 bar one 0.953897 0.26375
3 bar three 0.190113 1.01115
5 bar two 0.941511 -0.51730), ('foo', A B C D
0 foo one 1.119704 -0.742148
2 foo two 0.643483 -1.147405
4 foo two -0.952974 -0.434241
6 foo one -0.421435 0.933791
7 foo three -0.042118 0.641683)]
- get_group()
df.groupby(['A']).get_group('bar')
与list(df.groupby('A'))[0][1]
相同
- .groups:将分组后的groups转为dict
- 分组计算函数方法
grouped = df.groupby(['A'])
print(grouped)
print(grouped.first(),'→ first:非NaN的第一个值\n')
print(grouped.last(),'→ last:非NaN的最后一个值\n')
print(grouped.sum(),'→ sum:非NaN的和\n')
print(grouped.mean(),'→ mean:非NaN的平均值\n')
print(grouped.median(),'→ median:非NaN的算术中位数\n')
print(grouped.count(),'→ count:非NaN的值\n')
print(grouped.min(),'→ min、max:非NaN的最小值、最大值\n')
print(grouped.std(),'→ std,var:非NaN的标准差和方差\n')
print(grouped.prod(),'→ prod:非NaN的积\n')
- 多函数计算:agg()
函数写法可以用str,或者np.方法
求均值和求和
可以通过list,dict传入,当用dict时,key名为columns → 更新pandas后会出现警告
df.groupby('A')['C'].agg({'result1':np.mean,
'result2':np.sum})