python pandas分组聚合详细
作者:FTDdata 发布时间:2022-01-27 22:21:44
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=0
或level='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
来源:https://www.jianshu.com/p/bd8d6ba29d0e
猜你喜欢
- 本文介绍了python opencv之SIFT算法示例,分享给大家,具体如下:目标:学习SIFT算法的概念 学习在图像中查找SIFT关键的和
- 1.什么是内存逃逸在一段程序中,每一个函数都会有自己的内存区域分配自己的局部变量,返回值,这些内存会由编译器在栈中进行分配,每一个函数会分配
- 设法让用户happy吧~只要你的设计让用户乐了,产品的个性就得到了一次彰显,而用户对网站的情感就会获得一次升华,看看下面的知名网站的人性化设
- MVC设计模式MVC (Model-View-Controller) 是软件工程中常用的软件架构模式,它是一种分离业务逻辑与显示界面的设计方
- 导语应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不
- 1. mmap内存映射文件建立一个文件的内存映射将使用操作系统虚拟内存来直接访问文件系统上的数据,而不是使用常规的I/O函数访问数据。内存映
- 用Python对数学函数进行求值、求偏导from sympy import *# x = Symbol("x")# y
- 简介这里通过python的绘图工具Matplotlib包可视化实现机器学习中的KNN算法。 需要提前安装python的Numpy和Matpl
- SQL Server Sa用户相信大家都有一定的理解,下面就为您介绍SQL Server 2000身份验证模式的修改方法及SQL Serve
- 在我们的日常生活工作中,经常会遇到需要上传日志的场景,比如多台机器运行同一个程序,并且需要记录每台机器程序产生的日志,根据相关关键词告警,或
- 用XMLHTTP Post Form时的表单乱码有两方面的原因——Post表单数据时中文乱码;服务器Response被XMLHTTP不正确编
- 前言常见的通知方式有:邮件,电话,短信,微信。短信和电话:通常是收费的,较少使用;邮件:适合带文件类型的通知,较正式,存档使用;微信:适合告
- 以用户为中心的设计、用户体验,这两个词现在在互联网上几乎随处可见,除了设计师外,很多的用户也都在说这两个词,于是我们经常会听到诸如“这里用户
- 本文将介绍PHP中单引号和双引号的区别。PHP中单引号和双引号简介在 PHP 中,我们使用引号来指定值是字符串文字。有两种不同类型的报价。它
- 关于Python数据分析中pandas模块在输出的时候,每行的中间会有省略号出现,和行与行中间的省略号....问题,其他的站点(百度)中的大
- 在使用Python库时,常常会用到matplotlib.pyplot绘图,本文介绍在PyCharm及Jupyter Notebook页面中控
- 本文实例讲述了Python高级编程之继承问题。分享给大家供大家参考,具体如下:多继承问题1.单独调用父类: 一个子类同时继承自多个父类,又称
- 前言通常执行 python 程序要有相应的 Python 环境,但某些特定场景下,我们可能并不愿意这么麻烦的去配置这些环境(比如将写好的脚本
- Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。一、创建字典字典由键和对应值成对组成。字典也
- 该章节为 Python自动化办公篇 的最后一章,通过定时任务发送邮件的方式学习定时模块的使用 --> schedule 。(该章内容篇