Pandas分组聚合之groupby()、agg()方法的使用教程
作者:胡桃の壶 发布时间:2021-07-07 00:29:55
标签:pandas,groupby(),agg()
创建一个dataframe结构
import pandas as pd
df = pd.DataFrame(
data={
'name': ['z_s', 'l_s', 'w_w', 'z_l', 'y_s', 'j_j', 'l_b', 'z_f', 'hs_q', 'lbl_k', 'qy_n', 'mg_n'],
'score': [100, 97, 98, 89, 67, 59, 29, 87, 78, 89, 88, 80],
'group': [1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2],
'cls': ['A', 'A', 'A', 'B', 'B', 'B', 'A', 'A', 'A', 'B', 'B', 'B'],
'height': [178.0, 180.0, 176.0, 182.0, 189.0, 190.0, 172.5, 175.0, 165.0, 160.0, 158.5, 159.0]
},
index=['stu_' + str(i) for i in np.arange(1, 13, 1)]
)
print('df:\n', df)
分组函数 groupby()
初识分组聚合
我们可以通过DataFrame.groupby(by=[”column“]) 方法对数据进行分组,再根据需求进行 聚合操作。
统计各个班的最高的成绩:
# 先按照班级进行分组,再统计各个组里面的成绩的最大值!
ret = df.groupby(by=['cls'])['score'].max().reset_index()
print('ret:\n', ret)
分开来看就是:
ret = df.groupby(by=['cls'])# 将数据以 cls 进行分组,返回 DataFrameGroupBy 对象
print(ret)# <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002B6B2003A60>
ret = ret['score']# 取出 score 列,返回 SeriesGroupBy 对象
print(ret)# <pandas.core.groupby.generic.SeriesGroupBy object at 0x000002B6B59EAFD0>
ret = ret.max()# 取出 score 中的最大值,返回 Series 对象
print(ret)
"""
cls
A 100
B 89
Name: score, dtype: int64
"""
ret = ret.reset_index()# 重设索引,返回 DataFrame 对象
print(ret)
"""
cls score
0 A 100
1 B 89
"""
多重行索引分组聚合
统计各个班的各个小组的最高成绩
# 先按照班级分组,再按照小组分组,最后统计各个小组内成绩的最大值
ret = df.groupby(by=['cls', 'group'])['score'].max()
print('ret:\n', ret)
print('index:\n', ret.index)# MultiIndex ---多重行索引
ret = ret.reset_index()# 重设索引
print(ret)
对多列数据进行分组聚合
统计各个班级的成绩、身高的平均值:
# 按照班级分组,统计各个组内 成绩、身高的平均值
ret = df.groupby(by=['cls'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)
综合应用
统计各个班级、各个小组的成绩、身高的平均值
# 先按照班级分组、再按照小组分组---统计各个小组内的成绩的平均值、身高的平均值
ret = df.groupby(by=['cls', 'group'])[['score', 'height']].mean().reset_index()
print('ret:\n', ret)
聚合函数 agg(aggregate)
在Pandas中,
agg
和aggregate
两个函数指向同一个方法,使用时写任意一个即可。
求 多列数据 的 多个指标
统计成绩、身高的最大值、均值
# 使用agg 方法 可以对多列数据一次性求出多个指标
ret = df.loc[:, ['score', 'height']].agg([np.max, np.mean])
print('ret:\n', ret)
对多列数据统计不同的指标
统计成绩的均值、同时统计身高的最大值
ret = df.agg({'score': [np.mean], 'height': [np.max]})
print('ret:\n',ret)
对多列数据统计不同个数的指标
统计成绩的均值、最大值、中位数 和 身高的均值
ret = df.agg({'score': [np.mean, np.max, np.median], 'height': [np.mean]})
print('ret:\n', ret)
使用agg 方法也可以配合着 分组 对不同列、不同的数据、统计不同个数的 不同指标!
ret = df.groupby(by=['cls']).agg({'height': [np.max,np.mean], 'score': [np.min]})
print('ret:\n', ret)
agg调用 自定义函数
ret = df.loc[:, 'score'].agg(lambda x: x + 1)
print('ret1:\n', ret)
def func_add_one(x):
return x + 1
ret = df.loc[:, 'score'].agg(func_add_one)
print('ret2:\n', ret)
# 对多列 使用自定义函数
ret = df.loc[:, ['score', 'height']].agg(func_add_one)
print('ret3:\n', ret)
使用agg 调用numpy的统计指标
# 统计所有同学成绩的和
ret = df.loc[:, 'score'].agg(np.sum)
print('ret:\n',ret)
print('type:\n',type(ret))
# # 统计所有同学 成绩以及身高 的和
ret = df.loc[:, ['score', 'height']].agg(np.sum)
print('ret:\n', ret)
print('type:\n',type(ret))
# 统计身高 + 成绩(无意义的,只是为了演示能够 同一行相加)
ret = df.loc[:, ['score', 'height']].agg(np.sum, axis=1)# 使用axis指定相加的方向
print('ret:\n', ret)
print('type:\n',type(ret))
除了以上方法之外,还可以使用自定义方法聚合,可以参见我的这篇文章:Pandas使用自定义方法
来源:https://blog.csdn.net/weixin_45760274/article/details/123511623


猜你喜欢
- 数据库缓存为了使用数据库表作为缓存后端,首先在数据库中运行这个命令以创建缓存表:python manage.py createcacheta
- 大一上学期学习的内容之一,小黑屋比较好玩。1.导入函数库先导入random、time两个函数库的使用来达到随机生成人物、生成人物加载时间的目
- 1、异常出现的场景.:在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器。将表中
- %r用rper()方法处理对象%s用str()方法处理对象相同结果有些情况下,两者处理的结果是一样的,比如说处理int型对象。例:print
- 在python自动化中,经常会遇到对数据文件的操作,比如添加多名员工,但是直接将员工数据写在python文件中,不但工作量大,要是以后再次遇
- 实现方法: 建立一个用户附加表InviteUser_NewUser,结构如下: 然后跟着我的思路走: 用户接这个链接后 =》 进
- 在移动社交时代,微信已经成为我们生活不可或缺的一部分。2017年的《微信数据报告》中显示:每天有380亿条消息从微信上发出,其中6亿条是语音
- LDA(Latent Dirichlet allocation)模型是一种常用而用途广泛地概率主题模型。其实现一般通过Variational
- 1)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2)应尽量避免在 where 子
- 在pytorch的CNN代码中经常会看到x.view(x.size(0), -1)首先,在pytorch中的view()函数就是用来改变te
- 录入身份证信息是一件繁琐的工作,如果可以自动识别并且录入系统,那可真是太好了。今天我们就来学习一下,如何自动识别身份证信息并且录入系统~识别
- 例如数据 列Namename abcd最后的结果a*b*c*d*declare @test table( namevarchar(10))&
- python的文件和路径操作函数基本上位于os和os.path模块中。os.listdir(dirname):列出dirname下的目录和文
- 下面把角色分为两种,普通用户和管理员用户,至少对于普通用户来说,直接修改DB是不可取的,要有用户注册的功能,下面就开始进行用户注册的开发。用
- (一)问题遗传算法求解正方形拼图游戏(二)代码#!/usr/bin/env python# -*- coding: utf-8 -*-fro
- 随着 Node.js v8 的发布,Node.js 已原生支持 async/await 函数,Web 框架 Koa 也随之发布了 Koa 2
- 连接查询:是将两个查询(或表)的每一行,以“两两横同对接”的方式,所得到的所有行的结果,即一个表中的某行,跟另一个表中的某行。进行“横向对接
- 下面从以下四种方案分析各自的优缺点。方案一:SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1;
- 本文介绍的是关于Python列表项排序的相关内容,分享出来供大家参考学习,下面来看看详细的介绍:典型代码1:data_list = [6,
- 数据import numpy as npimport pandas as pddata = [{'Name': '小