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 pd
import numpy as np
pd.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  C
0  1  1  6
1  1  2  8
2  2  3  1
3  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  C
0  1  1  6
1  1  2  8) <class 'tuple'>
(2,    A  B  C
2  2  3  1
3  2  4  9) <class 'tuple'>

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

# 分组求和
df.groupby('A').agg('sum')
   B   C
A
1  3  14
2  7  10

3、序列分组

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

# 定义分组列表
label=['a','a','b','b']
# 分组求和
df.groupby(label).agg('sum')
   A  B   C
a  2  3  14
b  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  C
0  1  3  6
1  1  4  8
2  2  3  1
3  2  3  9

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

# 根据多列分组求和
df.groupby(['A','B']).agg('sum')
      C
A B
1 3   6
  4   8
2 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  C
a  1  3  6
a  1  4  8
b  2  3  1
b  2  3  9

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

# 根据索引分组求和
df.groupby(level=0).agg('sum')
   A  B   C
a  2  7  14
b  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
         value
id1 id2
1   3        4
    4        7
2   3        2
    3        9

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

# 根据第一层索引分组求和
df.groupby(level=0).agg('sum')
     value
id1
1       11
2       11
# 根据第一层索引分组求和
df.groupby(level='id1').agg('sum')
    value
id1
1       11
2       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  D
0  1  3  6  2
1  1  4  8  5
2  2  3  1  4
3  2  3  9  8

8、单函数对多列

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

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

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

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

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

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

9、多函数对多列

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

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

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

# 聚合函数重命名
df.groupby('A').agg([('SUM','sum'),('MEAN','mean')])
    B        C        D
  SUM MEAN SUM MEAN SUM MEAN
A
1   7  3.5  14    7   7  3.5
2   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 MAX
A
1   7   4  14   8   7   5
2   6   3  10   9  12   8

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

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

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

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

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

(0)

相关推荐

  • 利用python Pandas实现批量拆分Excel与合并Excel

    一.实例演示 1.将一个大Excel等份拆成多个Excel 2.将多个小Excel合并成一个大Excel并标记来源 work_dir="./course_datas/c15_excel_split_merge" splits_dir=f"{work_dir}/splits" import os if not os.path.exists(splits_dir): os.mkdir(splits_dir) 二.读取源Excel到Pandas import pandas

  • python geopandas读取、创建shapefile文件的方法

    shapefile是GIS中非常重要的一种数据类型,在ArcGIS中被称为要素类(Feature Class),主要包括点(point).线(polyline)和多边形(polygon).作为一种十分常见的矢量文件格式,geopandas对shapefile提供了很好的读取和写出支持,其DataFrame结构相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,使得在python中操作地理数据更方便.本文给大家介绍下用Python脚本中对Shapefile文件(.shp,.shx,.d

  • python中pandas对多列进行分组统计的实现

    使用groupby([ ]).size()统计的结果,值相同的字段值会不显示 如上图所示,第一个空着的行是982499 7 3388 1,因为此行与前面一行的这两个字段值是一样的,所以不显示.第二个空着的行是390192 22 4278 1,因为此行与前面一行的第一个字段值是一样的,所以不显示.这样的展示方式更直观,但对于刚用的人,可能会让其以为是缺失值. 如果还不明白可以看下面的全部数据及操作. import pandas as pd res6 = pd.read_csv('test.csv'

  • Python Pandas分组聚合的实现方法

    Pycharm 鼠标移动到函数上,CTRL+Q可以快速查看文档,CTR+P可以看基本的参数. apply(),applymap()和map() apply()和applymap()是DataFrame的函数,map()是Series的函数. apply()的操作对象是DataFrame的一行或者一列数据,applymap()是DataFrame的每一个元素.map()也是Series中的每一个元素. apply()对dataframe的内容进行批量处理, 这样要比循环来得快.如df.apply(

  • Python pandas求方差和标准差的方法实例

    目录 准备 1.求方差 1.1对全表进行操作 1.1.1求取每列的方差 1.1.2 求取每行的方差 1.2 对单独的一行或者一列进行操作 1.2.1 求取单独某一列的方差 1.2.2 求取单独某一行的方差 1.3 对多行或者多列进行操作 1.3.1 求取多列的方差 1.3.2 求取多行的方差 2 求标准差 2.1对全表进行操作 2.1.1对每一列求标准差 2.1.2 对每一行求标准差 2.2 对单独的一行或者一列进行操作 2.2.1 对某一列求标准差 2.2.2 对某一行求标准差 2.3 对多行

  • 详解python pandas 分组统计的方法

    首先,看看本文所面向的应用场景:我们有一个数据集df,现在想统计数据中某一列每个元素的出现次数.这个在我们前面文章<如何画直方图>中已经介绍了方法,利用value_counts()就可以实现(具体回看文章) 但是,现在,我们考虑另外一个场景,我们假如要想统计其中两列元素出现次数呢?举个栗子: 在df数据集中,如果我们想统计A.B两列的元素的出现情况,也就是说,得到如下表. 从上面的最后一列可以看到,在A.B两列中,1 2 出现了2次,1 4 出现1次 ,1 6出现1次,2 3出现了2次, 2

  • Python Pandas的简单使用教程

    一. Pandas简介 1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.pandas提供了大量能使我们快速便捷地处理数据的函数和方法.你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一. 2.Pandas 是python的一个数据分析包,最初由AQR Capital Management

  • Python Pandas实现数据分组求平均值并填充nan的示例

    Python实现按某一列关键字分组,并计算各列的平均值,并用该值填充该分类该列的nan值. DataFrame数据格式 fillna方式实现 groupby方式实现 DataFrame数据格式 以下是数据存储形式: fillna方式实现 1.按照industryName1列,筛选出业绩 2.筛选出相同行业的Series 3.计算平均值mean,采用fillna函数填充 4.append到新DataFrame中 5.循环遍历行业名称,完成2,3,4步骤 factordatafillna = pd.

  • 使用Python pandas读取CSV文件应该注意什么?

    示例文件 将以下内容保存为文件 people.csv. id,姓名,性别,出生日期,出生地,职业,爱好 1,张小三,m,1992-10-03,北京,工程师,足球 2,李云义,m,1995-02-12,上海,程序员,读书 下棋 3,周娟,女,1998-03-25,合肥,护士,音乐,跑步 4,赵盈盈,Female,2001-6-32,,学生,画画 5,郑强强,男,1991-03-05,南京(nanjing),律师,历史-政治 如果一切正常的话,在Jupyter Notebook 中应该显示以下内容:

  • Python学习笔记之pandas索引列、过滤、分组、求和功能示例

    本文实例讲述了Python学习笔记之pandas索引列.过滤.分组.求和功能.分享给大家供大家参考,具体如下: 解析html内容,保存为csv文件 //www.jb51.net/article/162401.htm 前面我们已经把519961(基金编码)这种基金的历史净值明细表html内容抓取到了本地,现在我们还是需要 解析html,取出相关的值,然后保存为csv文件以便pandas来统计分析. from bs4 import BeautifulSoup import os import csv

  • Python pandas系列之众数和分位数

    目录 准备 1.求众数 1.1对全表进行操作 1.1.1求取每列的众数 1.1.2 求取每行的众数 1.2 对单独的一行或者一列进行操作 1.2.1 求取单独某一列的众数 1.2.2 求取单独某一行的众数 1.3 对多行或者多列进行操作 1.3.1 求取多列的众数 1.3.2 求取多行的众数 2 求分位数 2.1 求取不同分位的分位数 2.1.1 四分之一分位数 2.1.2 四分之三分位数 2.2对全表进行操作 2.2.1对每一列求分位数 2.2.2 对每一行求分位数 2.3 对单独的一行或者一

随机推荐