我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python DataFrame数据分组统计groupby()函数的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python DataFrame数据分组统计groupby()函数的使用

groupby()函数

在python的DataFrame中对数据进行分组统计主要使用groupby()函数。

1. groupby基本用法

1.1 一级分类_分组求和

import pandas as pd
data = [['a', 'A', 109], ['b', 'B', 112], ['c', 'A', 125], ['d', 'C', 120],
        ['e', 'C', 126], ['f', 'B', 133], ['g', 'A', 124], ['h', 'B', 134],
        ['i', 'C', 117], ['j', 'C', 128]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
columns = ['name', 'class', 'num']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("=================================================")
df1 = df.groupby('class').sum()       # 分组统计求和
print(df1)

在这里插入图片描述

1.2 二级分类_分组求和

给groupby()传入一个列表,列表中的元素为分类字段,从左到右分类级别增大。(一级分类、二级分类…)

import pandas as pd
data = [['a', 'A', '1等', 109], ['b', 'B', '1等', 112], ['c', 'A', '1等', 125], ['d', 'B', '2等', 120],
        ['e', 'B', '1等', 126], ['f', 'B', '2等', 133], ['g', 'A', '2等', 124], ['h', 'B', '1等', 134],
        ['i', 'A', '2等', 117], ['j', 'A', '2等', 128], ['h', 'A', '1等', 130], ['i', 'B', '2等', 122]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("=================================================")
df1 = df.groupby(['class_1', 'class_2']).sum()       # 分组统计求和
print(df1)

在这里插入图片描述

1.3 对DataFrameGroupBy对象列名索引(对指定列统计计算)

其中,df.groupby(‘class_1’)得到一个DataFrameGroupBy对象,对该对象可以使用列名进行索引,以对指定的列进行统计。
如:df.groupby(‘class_1’)[‘num’].sum()

import pandas as pd
data = [['a', 'A', '1等', 109], ['b', 'B', '1等', 112], ['c', 'A', '1等', 125], ['d', 'B', '2等', 120],
        ['e', 'B', '1等', 126], ['f', 'B', '2等', 133], ['g', 'A', '2等', 124], ['h', 'B', '1等', 134],
        ['i', 'A', '2等', 117], ['j', 'A', '2等', 128], ['h', 'A', '1等', 130], ['i', 'B', '2等', 122]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("=================================================")
df1 = df.groupby('class_1')['num'].sum()
print(df1)

代码运行结果同上。

2. 对分组数据进行迭代

2.1 对一级分类的DataFrameGroupBy对象进行遍历

for name, group in DataFrameGroupBy_object

其中,name指分类的类名,group指该类的所有数据。

import pandas as pd
data = [['a', 'A', '1等', 109], ['b', 'C', '1等', 112], ['c', 'A', '1等', 125], ['d', 'B', '2等', 120],
        ['e', 'B', '1等', 126], ['f', 'B', '2等', 133], ['g', 'C', '2等', 124], ['h', 'A', '1等', 134],
        ['i', 'C', '2等', 117], ['j', 'A', '2等', 128], ['h', 'B', '1等', 130], ['i', 'C', '2等', 122]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("===============================")

# 获取目标数据。
df1 = df[['name', 'class_1', 'num']]
for name, group in df1.groupby('class_1'):
        print(name)
        print("=============================")
        print(group)
        print("==================================================")

在这里插入图片描述

在这里插入图片描述

2.2 对二级分类的DataFrameGroupBy对象进行遍历

对二级分类的DataFrameGroupBy对象进行遍历,
for (key1, key2), group in df.groupby([‘class_1’, ‘class_2’]) 为例
不同于一级分类的是, (key1, key2)是一个由多级类别组成的元组,而group表示该多级分类类别下的数据。

import pandas as pd
data = [['a', 'A', '1等', 109], ['b', 'C', '1等', 112], ['c', 'A', '1等', 125], ['d', 'B', '2等', 120],
        ['e', 'B', '1等', 126], ['f', 'B', '2等', 133], ['g', 'C', '2等', 124], ['h', 'A', '1等', 134],
        ['i', 'C', '2等', 117], ['j', 'A', '2等', 128], ['h', 'B', '1等', 130], ['i', 'C', '2等', 122]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("===============================")


for (key1, key2), group in df.groupby(['class_1', 'class_2']):
        print(key1, key2)
        print("=============================")
        print(group)
        print("==================================================")

程序运行结果如下:

在这里插入图片描述

在这里插入图片描述

(部分)

3. agg()函数

使用groupby()函数和agg()函数 实现 分组聚合操作运算。

3.1一般写法_对目标数据使用同一聚合函数

以 分组求均值、求和 为例

给agg()传入一个列表

df1.groupby([‘class_1’, ‘class_2’]).agg([‘mean’, ‘sum’])

import pandas as pd
data = [['a', 'A', '1等', 109, 144], ['b', 'C', '1等', 112, 132], ['c', 'A', '1等', 125, 137], ['d', 'B', '2等', 120, 121],
        ['e', 'B', '1等', 126, 136], ['f', 'B', '2等', 133, 127], ['g', 'C', '2等', 124, 126], ['h', 'A', '1等', 134, 125],
        ['i', 'C', '2等', 117, 125], ['j', 'A', '2等', 128, 133], ['h', 'B', '1等', 130, 122], ['i', 'C', '2等', 122, 111]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num1', 'num2']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("===============================")
df1 = df[['class_1', 'class_2', 'num1', 'num2']]
print(df1.groupby(['class_1', 'class_2']).agg(['mean', 'sum']))

在这里插入图片描述

3.2 对不同列使用不同聚合函数

给agg()方法传入一个字典

import pandas as pd
data = [['a', 'A', '1等', 109, 144], ['b', 'C', '1等', 112, 132], ['c', 'A', '1等', 125, 137], ['d', 'B', '2等', 120, 121],
        ['e', 'B', '1等', 126, 136], ['f', 'B', '2等', 133, 127], ['g', 'C', '2等', 124, 126], ['h', 'A', '1等', 134, 125],
        ['i', 'C', '2等', 117, 125], ['j', 'A', '2等', 128, 133], ['h', 'B', '1等', 130, 122], ['i', 'C', '2等', 122, 111]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num1', 'num2']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("===============================")
df1 = df[['class_1', 'num1', 'num2']]
print(df1.groupby('class_1').agg({'num1': ['mean', 'sum'], 'num2': ['sum']}))

在这里插入图片描述

3.3 自定义函数写法

也可以自定义一个函数(以名为max1为例)传入agg()中。

import pandas as pd
data = [['a', 'A', '1等', 109, 144], ['b', 'C', '1等', 112, 132], ['c', 'A', '1等', 125, 137], ['d', 'B', '2等', 120, 121],
        ['e', 'B', '1等', 126, 136], ['f', 'B', '2等', 133, 127], ['g', 'C', '2等', 124, 126], ['h', 'A', '1等', 134, 125],
        ['i', 'C', '2等', 117, 125], ['j', 'A', '2等', 128, 133], ['h', 'B', '1等', 130, 122], ['i', 'C', '2等', 122, 111]]
index = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
columns = ['name', 'class_1', 'class_2', 'num1', 'num2']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print("===============================")

max1 = lambda x: x.value_counts(dropna=False).index[0]
max1.__name__ = "类别数量最多"
df1 = df.agg({'class_1': [max1],
        'num1': ['sum', 'mean'],
        'num2': ['sum', 'mean']})
print(df1)

在这里插入图片描述

4. 通过 字典 和 Series 对象进行分组统计

groupy()不仅仅可以传入单个列,或多个列组成的列表,
也可以传入一个字典或者一个Series来实现分组。

4.1通过一个字典

import pandas as pd
data = [['A', 10000, 20121, 14521, 20, 23, 4, 5000],
        ['B', 12000, 12541, 11220, 14, 25, 5, 6000],
        ['C', 21420, 26452, 34215, 25, 24, 4, 5266],
        ['D', 21025, 23155, 31251, 23, 26, 6, 6452],
        ['E', 30021, 23512, 21452, 30, 27, 5, 7525],
        ['F', 32152, 30214, 26321, 32, 30, 7, 6952]]
columns = ['公司', 'a产品产量', 'b产品产量', 'c产品产量', '搬运工数量', '推销员数量', '经理数量', '平均工资']
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame(data=data, columns=columns)
df = df.set_index(['公司'])
print(df)
print("===============================")

mapping = {
    'a产品产量': '产品产量', 'b产品产量': '产品产量',
    'c产品产量': '产品产量', '搬运工数量': '人员数量',
    '推销员数量': '人员数量', '经理数量': '人员数量',
    '平均工资': '平均工资'
}

df1 = df.groupby(mapping, axis=1).sum()
print(df1)

程序运行结果:

在这里插入图片描述

4.2通过一个Series

import pandas as pd
data = [['A', 10000, 20121, 14521, 20, 23, 4, 5000],
        ['B', 12000, 12541, 11220, 14, 25, 5, 6000],
        ['C', 21420, 26452, 34215, 25, 24, 4, 5266],
        ['D', 21025, 23155, 31251, 23, 26, 6, 6452],
        ['E', 30021, 23512, 21452, 30, 27, 5, 7525],
        ['F', 32152, 30214, 26321, 32, 30, 7, 6952]]
columns = ['公司', 'a产品产量', 'b产品产量', 'c产品产量', '搬运工数量', '推销员数量', '经理数量', '平均工资']
pd.set_option('display.unicode.east_asian_width', True)
df = pd.DataFrame(data=data, columns=columns)
df = df.set_index(['公司'])
print(df)
print("===============================")

data = {
    'a产品产量': '产品产量', 'b产品产量': '产品产量',
    'c产品产量': '产品产量', '搬运工数量': '人员数量',
    '推销员数量': '人员数量', '经理数量': '人员数量',
    '平均工资': '平均工资'
}
s1 = pd.Series(data)
df1 = df.groupby(s1, axis=1).sum()
print(df1)

程序运行结果:

在这里插入图片描述

参考资源: python数据分析从入门到精通 明日科技编著 清华大学出版社

到此这篇关于python DataFrame数据分组统计groupby()函数的使用的文章就介绍到这了,更多相关python DataFrame groupby() 内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python DataFrame数据分组统计groupby()函数的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么使用python中分组函数groupby和分组运算函数agg

这篇文章主要介绍“怎么使用python中分组函数groupby和分组运算函数agg”,在日常操作中,相信很多人在怎么使用python中分组函数groupby和分组运算函数agg问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希
2023-06-25

Python数据分析:pandas中Dataframe的groupby与索引用法

Pandasgroupby操作允许根据键对DataFrame数据进行分组,而索引提供快速查找DataFrame特定行的机制。结合使用可高效分析大型数据集。groupby根据键分组数据,返回按键分组的组,可使用apply()/agg()/transform()方法对组应用聚合函数或操作。索引唯一标识每一行,可通过loc和iloc方法访问和检索行。结合groupby和索引,可以高效执行高级数据操作,如按组索引、迭代和过滤。
Python数据分析:pandas中Dataframe的groupby与索引用法
2024-04-02

怎么使用python groupby函数实现分组后选取最值

这篇文章主要介绍“怎么使用python groupby函数实现分组后选取最值”,在日常操作中,相信很多人在怎么使用python groupby函数实现分组后选取最值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答
2023-07-02

PHP 数组分组函数在统计分析中的应用

使用 php 的 array_group_by() 函数可以对数组中的数据进行分组,从而方便进行统计分析,包括:分组后,可以通过 array_map() 函数计算每个组中的元素数量。还可以通过自定义回调函数找出每个组中具有最大值的元素。通过
PHP 数组分组函数在统计分析中的应用
2024-05-02

Python数据分析之堆叠数组函数怎么使用

今天小编给大家分享一下Python数据分析之堆叠数组函数怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。numpy 堆
2023-07-05

Oracle 窗口函数在数据排序与分组统计中的高效运用

Oracle 窗口函数在数据排序与分组统计中发挥着重要作用,它们能够对数据集进行行级别的运算,而不会像传统聚合函数那样折叠所有行到单个输出。以下是Oracle窗口函数在数据排序与分组统计中的高效运用:窗口函数的基本语法窗口函数的基本语法
Oracle 窗口函数在数据排序与分组统计中的高效运用
2024-10-09

怎么用python dataframe统计行列中零值的个数

今天小编给大家分享一下怎么用python dataframe统计行列中零值的个数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-29

MySQL如何统计每个分组的数据条数

在MySQL中,可以使用COUNT函数来统计每个分组的数据条数。下面是一个示例查询:SELECT column_name1, column_name2, COUNT(*) AS countFROM table_nameGROUP BY
MySQL如何统计每个分组的数据条数
2024-04-09

PHP 数组分组函数在数据清洗中的作用

php 的分组函数在数据清洗中发挥着重要作用,包括 array_group_by()、array_column() 和 array_multisort()。这些函数可用于对数组进行分组,例如根据订单 id 或客户 id 分组订单数据,从而简
PHP 数组分组函数在数据清洗中的作用
2024-05-03

PHP 数组分组函数在数据整理中的应用

php 的 array_group_by 函数可根据键或闭包函数对数组中的元素分组,返回一个关联数组,其中键是组名,值是属于该组的元素数组。PHP 数组分组函数在数据整理中的应用引言数据分组是数据处理中的一项常见任务,它可以帮助我们整理
PHP 数组分组函数在数据整理中的应用
2024-05-04

PHP 数组分组函数在数据聚合中的应用

php array_group_by() 函数可根据指定键对数组元素进行分组,形成以键为索引、以数组为值的数组。实例如,根据产品字段分组销售记录后,分组后的数组中键为产品值,值为属于此产品的销售记录数组。PHP 数组分组函数在数据聚合中的应
PHP 数组分组函数在数据聚合中的应用
2024-05-01

数据库的统计汇总分组合并

对表数据进行检索时,经常需要对结果进行汇总或计算,例如,在学生成绩数据库中求某门课程的总成绩,统计个分数段的人数等。1.统计函数统计函数用于计算表中的数据,返回单个计算结果SUM和AVG函数:分别用于求表达式中所有值项的总和与平均值--求选修100012课程的
数据库的统计汇总分组合并
2021-02-15

MySql的回顾三:流程控制函数/统计函数/分组查询

路漫漫其修远兮,吾将上下而求索,又到了周末,我继续带各位看官学习回顾Mysql知识。上次说到了流程控制函数,那就从流程控制函数来继续学习吧!#五.流程控制函数#1.if函数:if else的效果IF(条件表达式,成立返回1,不成立返回2)#与Java三元运算相
MySql的回顾三:流程控制函数/统计函数/分组查询
2021-11-26

MySql中流程控制函数/统计函数/分组查询用法解析

路漫漫其修远兮,吾将上下而求索,又到了周末,我继续带各位看官学习回顾Mysql知识。 上次说到了流程控制函数,那就从流程控制函数来继续学习吧!#五.流程控制函数 #1.if函数:if else的效果 IF(条件表达式,成立返回1,不成立返回
2022-05-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录