1.根据给定的条件将数据拆分成组
2.每个组都可以独立应用函数(如求和,求平均值)
3.将结果合并到一个数据结构中
DataFrame.groupby(by=None,axis=0,level=None,as_index=True,sort=True,group_keys=True,squeeze=False,observed=False)
by 映射,字典或Series对象、数组、标签或标签列表。如果by是一个函数,则对象索引的每个值调用它。如果传递了一个字典或Series对象,则使用该字典或Series对象值来确定组。如果传递了数组ndarray,则按原样使用这些值为确定组
axis axis=1表示行,axis=0表示列(默认)
level 表示索引层级,默认无
as_index 布尔型,默认为True,返回以组标签为索引的对象
sort 对组进行排序,布尔型,默认为True
group_keys 布尔型,默认为True,调用apply函数时,将分组的键添加到索引以标识片段
squeeze 布尔型,默认为False,如果可能,减少返回类型的维度,否则返回一致类型
observed 当以石斑鱼为分类时,才会使用该参数。如果参数值为True,则仅显示分类石斑鱼的观测值。如果为False,则显示分类石斑鱼的所有值
返回值 DataFrameGroupBy,返回包含有关组的信息的groupby对象
# 根据一级分类统计订单数据
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','7天点击量','订单预定']]
print(df1.groupby('一级分类').sum())
7天点击量 订单预定
一级分类
数据库 186 15
移动开发 261 7
编程语言与程序设计 4280 192
网页制作/Web技术 345 15
【按照多列分组统计】
# 根据两级分类统计订单数据
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
print(df1.groupby(['一级分类','二级分类']).sum())
7天点击量 订单预定
一级分类 二级分类
数据库 Oracle 58 2
SQL 128 13
移动开发 Android 261 7
编程语言与程序设计 ASP.NET 87 2
C# 314 12
C++/C语言 724 28
JSP/JavaWeb 157 1
Java 408 16
PHP 113 1
Python 2449 132
Visual Basic 28 0
网页制作/Web技术 HTML 188 8
JavaScript 100 7
WEB前端 57 0
【分组并按指定列进行数据计算】
# 统计各编程语言的7天点击量
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
print(df1.groupby('二级分类')['7天点击量'].sum())
二级分类
ASP.NET 87
Android 261
C# 314
C++/C语言 724
HTML 188
JSP/JavaWeb 157
Java 408
JavaScript 100
Oracle 58
PHP 113
Python 2449
SQL 128
Visual Basic 28
WEB前端 57
Name: 7天点击量, dtype: int64
【对分组数据进行迭代】
# 迭代一级分类的订单数据
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
for name,group in df1.groupby('一级分类'):
print(name)
print(group)
数据库
一级分类 二级分类 7天点击量 订单预定
25 数据库 Oracle 58 2
27 数据库 SQL 128 13
移动开发
一级分类 二级分类 7天点击量 订单预定
10 移动开发 Android 85 4
19 移动开发 Android 32 1
24 移动开发 Android 85 2
28 移动开发 Android 59 0
编程语言与程序设计
一级分类 二级分类 7天点击量 订单预定
0 编程语言与程序设计 ASP.NET 35 1
1 编程语言与程序设计 PHP 49 0
2 编程语言与程序设计 Java 51 2
3 编程语言与程序设计 PHP 64 1
4 编程语言与程序设计 JSP/JavaWeb 26 0
5 编程语言与程序设计 C# 60 1
6 编程语言与程序设计 C++/C语言 227 11
8 编程语言与程序设计 C# 122 3
9 编程语言与程序设计 C++/C语言 111 5
11 编程语言与程序设计 C++/C语言 165 5
12 编程语言与程序设计 JSP/JavaWeb 131 1
13 编程语言与程序设计 Java 149 10
15 编程语言与程序设计 Python 1139 79
16 编程语言与程序设计 Java 125 1
18 编程语言与程序设计 C++/C语言 149 4
20 编程语言与程序设计 ASP.NET 52 1
21 编程语言与程序设计 Python 597 25
22 编程语言与程序设计 Python 474 15
23 编程语言与程序设计 Java 83 3
26 编程语言与程序设计 C# 132 8
29 编程语言与程序设计 C++/C语言 27 2
30 编程语言与程序设计 Python 239 13
31 编程语言与程序设计 C++/C语言 45 1
32 编程语言与程序设计 Visual Basic 28 0
网页制作/Web技术
一级分类 二级分类 7天点击量 订单预定
7 网页制作/Web技术 JavaScript 100 7
14 网页制作/Web技术 HTML 188 8
17 网页制作/Web技术 WEB前端 57 0
【迭代两级分类的订单数据】
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
for (key1,key2),group in df1.groupby(['一级分类','二级分类']):
print(key1,key2)
print(group)
一级分类 二级分类 7天点击量 订单预定
25 数据库 Oracle 58 2
数据库 SQL
一级分类 二级分类 7天点击量 订单预定
27 数据库 SQL 128 13
移动开发 Android
一级分类 二级分类 7天点击量 订单预定
10 移动开发 Android 85 4
19 移动开发 Android 32 1
24 移动开发 Android 85 2
28 移动开发 Android 59 0
编程语言与程序设计 ASP.NET
一级分类 二级分类 7天点击量 订单预定
0 编程语言与程序设计 ASP.NET 35 1
20 编程语言与程序设计 ASP.NET 52 1
编程语言与程序设计 C#
一级分类 二级分类 7天点击量 订单预定
5 编程语言与程序设计 C# 60 1
8 编程语言与程序设计 C# 122 3
26 编程语言与程序设计 C# 132 8
编程语言与程序设计 C++/C语言
一级分类 二级分类 7天点击量 订单预定
6 编程语言与程序设计 C++/C语言 227 11
9 编程语言与程序设计 C++/C语言 111 5
11 编程语言与程序设计 C++/C语言 165 5
18 编程语言与程序设计 C++/C语言 149 4
29 编程语言与程序设计 C++/C语言 27 2
31 编程语言与程序设计 C++/C语言 45 1
编程语言与程序设计 JSP/JavaWeb
一级分类 二级分类 7天点击量 订单预定
4 编程语言与程序设计 JSP/JavaWeb 26 0
12 编程语言与程序设计 JSP/JavaWeb 131 1
编程语言与程序设计 Java
一级分类 二级分类 7天点击量 订单预定
2 编程语言与程序设计 Java 51 2
13 编程语言与程序设计 Java 149 10
16 编程语言与程序设计 Java 125 1
23 编程语言与程序设计 Java 83 3
编程语言与程序设计 PHP
一级分类 二级分类 7天点击量 订单预定
1 编程语言与程序设计 PHP 49 0
3 编程语言与程序设计 PHP 64 1
编程语言与程序设计 Python
一级分类 二级分类 7天点击量 订单预定
15 编程语言与程序设计 Python 1139 79
21 编程语言与程序设计 Python 597 25
22 编程语言与程序设计 Python 474 15
30 编程语言与程序设计 Python 239 13
编程语言与程序设计 Visual Basic
一级分类 二级分类 7天点击量 订单预定
32 编程语言与程序设计 Visual Basic 28 0
网页制作/Web技术 HTML
一级分类 二级分类 7天点击量 订单预定
14 网页制作/Web技术 HTML 188 8
网页制作/Web技术 JavaScript
一级分类 二级分类 7天点击量 订单预定
7 网页制作/Web技术 JavaScript 100 7
网页制作/Web技术 WEB前端
一级分类 二级分类 7天点击量 订单预定
17 网页制作/Web技术 WEB前端 57 0
【针对不同的列使用不同的聚合函数】
# 按一级分类分组统计7天点击量、订单预定的平均值总和以及订单预定总和
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD.xlsx')
df1 = df[['一级分类','二级分类','7天点击量','订单预定']]
print(df1.groupby('一级分类').agg({'7天点击量':['mean','sum'],'订单预定':['sum']}))
7天点击量 订单预定
mean sum sum
一级分类
数据库 93.000000 186 15
移动开发 65.250000 261 7
编程语言与程序设计 178.333333 4280 192
网页制作/Web技术 115.000000 345 15
【通过自定义函数实现分组统计】
# 统计1月份销售数据中,购买次数最多的产品
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('1月.xlsx')
max1 = lambda x: x.value_counts(dropna=False).index[0]
max1.__name__ = "购买次数最多"
df1= df.agg({
'宝贝标题':[max1],
'数量':['sum','mean'],
'买家实际支付金额':['sum','mean']
})
print(df1)
宝贝标题 数量 买家实际支付金额
购买次数最多 零基础学Python NaN NaN
sum NaN 53.00 2528.5600
mean NaN 1.06 50.5712
# 通过字典分组统计“北上广”的销量
import pandas as pd
# 设置数据显示的列数和宽度
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_excel('JD2.xlsx')
df = df.set_index(['商品名称'])
dict1={
'上海出库销量':'北上广','北京出库销量':'北上广',
'广州出库销量':'广州','成都出库销量':'成都',
'武汉出库销量':'武汉','西安出库销量':'西安',
}
df1 = df.groupby(dict1, axis=1).sum()
print(df1)
北上广 广州 成都 武汉 西安
商品名称
零基础学Python(全彩版) 1413 578 284 246 152
Python从入门到项目实践(全彩版) 568 230 113 92 63
Python项目开发案例集锦(全彩版) 451 189 115 88 57
Python编程锦囊(全彩版) 321 136 85 65 47
零基础学C语言(全彩版) 249 115 82 63 40
SQL即查即用(全彩版) 217 88 29 25 40
零基础学Java(全彩版) 157 81 48 43 29
零基础学C++(全彩版) 148 75 53 35 23
零基础学C#(全彩版) 95 51 27 16 7
C#项目开发实战入门(全彩版) 93 42 18 22 12