您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:python pandas分组聚合详细

51自学网 2021-10-30 22:14:41
  python
这篇教程python pandas分组聚合详细写得很实用,希望能帮到您。

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
      A  B  C0  1  1  61  1  2  82  2  3  13  2  4  9

对数据框按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,    A  B  C0  1  1  61  1  2  8) <class 'tuple'>
(2,    A  B  C2  2  3  13  2  4  9) <class 'tuple'>

可以对分组后的数据框直接使用聚合方法agg,对分组数据框的每一列计算统计函数值。

# 分组求和df.groupby('A').agg('sum')   B   CA       1  3  142  7  10

3、序列分组

可以根据数据框外的序列数据对数据框进行分组,需要注意序列长度需要与数据框行数相同。

# 定义分组列表label=['a','a','b','b']# 分组求和df.groupby(label).agg('sum')   A  B   Ca  2  3  14b  4  7  10

4、多列分组

可以根据数据框的多列对数据框进行分组。

# 数据准备df = pd.DataFrame({'A': [1, 1, 2, 2],'B': [3, 4, 3, 3],'C':[6,8,1,9]})df
   A  B  C0  1  3  61  1  4  82  2  3  13  2  3  9

根据A,B列进行分组,然后求和。

# 根据多列分组求和df.groupby(['A','B']).agg('sum')
      CA B    1 3   6  4   82 3  10

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
   A  B  Ca  1  3  6a  1  4  8b  2  3  1b  2  3  9

数据框只有一层索引,设置参数level=0

# 根据索引分组求和df.groupby(level=0).agg('sum')   A  B   Ca  2  7  14b  4  6  10

当数据框索引有多层时,也可以根据需求设置level参数,完成分组聚合。

# 数据准备mi=pd.MultiIndex.from_arrays([[1,1,2,2],[3,4,3,3]],names=['id1','id2'])df=pd.DataFrame(dict(value=[4,7,2,9]),index=mi)df
         valueid1 id2       1   3        4    4        72   3        2    3        9

设置level参数,如需要根据第一层索引,即id1进行分组,可以设置level=0level='id1'完成分组聚合。

# 根据第一层索引分组求和df.groupby(level=0).agg('sum')
     valueid1       1       112       11
# 根据第一层索引分组求和df.groupby(level='id1').agg('sum') 
    valueid1       1       112       11

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
   A  B  C  D0  1  3  6  21  1  4  8  52  2  3  1  43  2  3  9  8

8、单函数对多列

对分组后数据框使用单个函数进行聚合,单个聚合函数会对每列进行计算,然后合并返回。聚合函数以字符串的形式传入。

# 对所有列分组求和df.groupby('A').agg('sum')
   B   C   DA           1  7  14   72  6  10  12

可以对分组后的数据指定列进行分组聚合。需要注意子列需要用[]包裹

# 对指定列分组求和df.groupby('A')[['B','C']].agg('sum')
   B   CA       1  7  142  6  10

聚合函数也可以传入自定义的匿名函数。

# 匿名函数分组求和df.groupby('A').agg(lambda x:sum(x))
  B   C   DA           1  7  14   72  6  10  12

9、多函数对多列

聚合函数可以是多个函数。聚合时,多个聚合函数会对每列进行计算,然后合并返回。聚合函数以列表的形式传入。

# 全部列多函数聚合df.groupby('A').agg(['sum','mean'])
    B        C        D       sum mean sum mean sum meanA                           1   7  3.5  14    7   7  3.52   6  3.0  10    5  12  6.0

聚合返回后的数据列名有两层索引,第一层是聚合的列名,第二层是使用的聚合函数名。如果需要对返回的聚合函数名重命名,
需要在传参时,传入元组,第一个元素为聚合函数名,第二个元素为聚合函数。

# 聚合函数重命名df.groupby('A').agg([('SUM','sum'),('MEAN','mean')])
    B        C        D       SUM MEAN SUM MEAN SUM MEANA                           1   7  3.5  14    7   7  3.52   6  3.0  10    5  12  6.0

同样,也可以传入匿名函数。

# 匿名函数并重命名df.groupby('A').agg([('SUM','sum'),('MAX',lambda x:max(x))])
    B       C       D      SUM MAX SUM MAX SUM MAXA                        1   7   4  14   8   7   52   6   3  10   9  12   8

如果需要对不同的列进行不同的聚合计算,则需要传入字典的形式。

# 不同列不同聚合函数df.groupby('A').agg({'B':['sum','mean'],'C':'mean'})
    B         C  sum mean meanA              1   7  3.5    72   6  3.0    5

可以重命名聚合后的列名,注意只能对一列传入一个聚合函数时有效

# 聚合后重命名列名df.groupby('A').agg(B_sum=('B','sum'),C_mean=('C','mean'))
   B_sum  C_meanA               1      7       72      6       5

到此这篇关于python pandas分组聚合详细的文章就介绍到这了,更多相关python pandas分组聚合内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


使用python半分钟轻松完成证件照换底色
OpenCV半小时掌握基本操作之像素加减乘除&逻辑运算
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。