当前位置:主页 > python教程 > Pandas分组聚合groupby()、agg()

Pandas分组聚合之groupby()、agg()方法的使用教程

发布:2023-04-27 11:15:01 59


给寻找编程代码教程的朋友们精选了相关的编程文章,网友游胤雅根据主题投稿了本篇教程内容,涉及到pandas、groupby()、pandas、agg()、pandas分组聚合、Pandas分组聚合groupby()、agg()相关内容,已被185网友关注,涉猎到的知识点内容可以在下方电子书获得。

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)		# 
ret = ret['score']				# 取出 score 列,返回 SeriesGroupBy 对象
print(ret)		# 
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中,aggaggregate两个函数指向同一个方法,使用时写任意一个即可。

求 多列数据 的 多个指标

统计成绩、身高的最大值、均值

# 使用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使用自定义方法

总结

到此这篇关于Pandas分组聚合之groupby()、agg()方法使用的文章就介绍到这了,更多相关Pandas分组聚合groupby()、agg()内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


相关文章

  • Pandas.DataFrame的行名和列名的修改

    发布:2023-03-29

    本文主要介绍了Pandas.DataFrame的行名和列名的修改,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Pandas处理DataFrame稀疏数据及维度不匹配数据分析详解

    发布:2023-04-07

    这篇文章主要为大家介绍了Pandas处理DataFrame稀疏数据及维度不匹配数据分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪


  • Python Pandas数据结构知识点总结

    发布:2020-04-29

    这篇文章主要介绍了Python Pandas数据结构简单介绍的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下


  • 详解pandas dataframe添加表格框线输出

    发布:2020-02-21

    今天小编就为大家分享一篇pandas dataframe添加表格框线输出的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧


  • Pandas分组与排序的实现

    Pandas分组与排序的实现

    发布:2022-07-11

    为网友们分享了关于Pandas的教程,这篇文章主要介绍了Pandas分组与排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Pandas时间数据处理详细教程

    发布:2023-04-29

    日常工作中日期格式有多种表达形式,比如年份开头或是月份开头2022/6/4、6/4/2022等,通过pandas的日期数据处理,这篇文章主要给大家介绍了关于Pandas时间数据处理的相关资料,需要的朋友可以参考下


  • Pandas中根据条件替换列中的值的四种方式

    发布:2023-03-06

    本文主要介绍了Pandas中根据条件替换列中的值的四种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧


  • Python pandas用法详解

    发布:2020-07-24

    维度查看:df.shape;数据表基本信息查看:df.info();查看每一列数据的格式:df.dtypes;查看某一列格式:df['B'].dtype;查看空值:df.isnull();查看某一列空值:df.isnull(),等等。


网友讨论