python|python pandas分组聚合详细
目录
- python pandas分组聚合
- 1、环境
- 2、分组
- 3、序列分组
- 4、多列分组
- 5、索引分组
- 7、聚合
- 8、单函数对多列
- 9、多函数对多列
python pandas分组聚合
1、环境
- python3.9
- win10 64bit
- pandas==1.2.1
groupby
方法是pandas中的分组方法,对数据框采用groupby
方法后,返回的是DataFrameGroupBy
对象,一般分组操作后会进行聚合操作。2、分组
import pandas as pdimport numpy as nppd.set_option('display.notebook_repr_html',False)# 数据准备df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [1, 2, 3, 4],'C':[6,8,1,9]})df
ABC0116112822313249
对数据框按
A
列进行分组,产生分组数据框。分组数据框是可迭代对象,可以进行循环遍历,可以看出在循环中,每个元素的类型是元组,元组的第一个元素是分组值,第二个元素是对应的分组数据框。
# 分组g_df=df.groupby('A')# 分组数据框类type(g_df)
pandas.core.groupby.generic.DataFrameGroupBy
# 循环分组数据for i in g_df:print(i,type(i),end='\n\n')
(1,ABC01161128)
(2,ABC22313249)
可以对分组后的数据框直接使用聚合方法
agg
,对分组数据框的每一列计算统计函数值。# 分组求和df.groupby('A').agg('sum')BCA13142710
3、序列分组
可以根据数据框外的序列数据对数据框进行分组,需要注意序列长度需要与数据框行数相同。
# 定义分组列表label=['a','a','b','b']# 分组求和df.groupby(label).agg('sum')ABCa2314b4710
4、多列分组
可以根据数据框的多列对数据框进行分组。
# 数据准备df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9]})df
ABC0136114822313239
根据
A
,B
列进行分组,然后求和。# 根据多列分组求和df.groupby(['A','B']).agg('sum')
CA B1 36482 310
5、索引分组
可以根据索引对数据框进行分组,需要设置level参数。
# 数据准备df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9]},index=['a','a','b','b'])df
ABCa136a148b231b239
数据框只有一层索引,设置参数
level=0
。# 根据索引分组求和df.groupby(level=0).agg('sum')ABCa2714b4610
当数据框索引有多层时,也可以根据需求设置level参数,完成分组聚合。
# 数据准备mi=pd.MultiIndex.from_arrays([[1,1,2,2],[3,4,3,3]],names=['id1','id2'])df=pd.DataFrame(dict(value=https://www.it610.com/article/[4,7,2,9]),index=mi)df
valueid1 id21344723239
设置
level
参数,如需要根据第一层索引,即id1进行分组,可以设置level=0
或level='id1'
完成分组聚合。# 根据第一层索引分组求和df.groupby(level=0).agg('sum')
valueid1111211
# 根据第一层索引分组求和df.groupby(level='id1').agg('sum')
valueid1111211
7、聚合
分组后一般会进行聚合操作,用
agg
方法进行聚合。# 数据准备df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9],'D':[2,5,4,8]})df
ABCD01362114852231432398
8、单函数对多列
【python|python pandas分组聚合详细】对分组后数据框使用单个函数进行聚合,单个聚合函数会对每列进行计算,然后合并返回。聚合函数以字符串的形式传入。
# 对所有列分组求和df.groupby('A').agg('sum')
BCDA17147261012
可以对分组后的数据指定列进行分组聚合。需要注意
子列需要用[]包裹
。# 对指定列分组求和df.groupby('A')[['B','C']].agg('sum')
BCA17142610
聚合函数也可以传入自定义的匿名函数。
# 匿名函数分组求和df.groupby('A').agg(lambda x:sum(x))
BCDA17147261012
9、多函数对多列
聚合函数可以是多个函数。聚合时,多个聚合函数会对每列进行计算,然后合并返回。聚合函数以列表的形式传入。
# 全部列多函数聚合df.groupby('A').agg(['sum','mean'])
BCDsum mean sum mean sum meanA173.514773.5263.0105126.0
聚合返回后的数据列名有两层索引,第一层是聚合的列名,第二层是使用的聚合函数名。如果需要对返回的聚合函数名重命名,
需要在传参时,传入元组,第一个元素为聚合函数名,第二个元素为聚合函数。
# 聚合函数重命名df.groupby('A').agg([('SUM','sum'),('MEAN','mean')])
BCDSUM MEAN SUM MEAN SUM MEANA173.514773.5263.0105126.0
同样,也可以传入匿名函数。
# 匿名函数并重命名df.groupby('A').agg([('SUM','sum'),('MAX',lambda x:max(x))])
BCDSUM MAX SUM MAX SUM MAXA17414875263109128
如果需要对不同的列进行不同的聚合计算,则需要传入字典的形式。
# 不同列不同聚合函数df.groupby('A').agg({'B':['sum','mean'],'C':'mean'})
BCsum mean meanA173.57263.05
可以重命名聚合后的列名,注意
只能对一列传入一个聚合函数时有效
。# 聚合后重命名列名df.groupby('A').agg(B_sum=('B','sum'),C_mean=('C','mean'))
B_sumC_meanA177265
到此这篇关于python pandas分组聚合详细的文章就介绍到这了,更多相关python pandas分组聚合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20