pandas.groupby()
是一个非常常用的 pandas 函数,用于按照特定的字段对数据进行分组、分析和处理。
作用
groupby()
函数可以将原始数据根据指定字段或者多个字段进行分组,返回一个按照分组后的结果进行的分组对象。分组对象也可以看作一个包含各种组合的表格,其中包含了每个组的相关信息。
使用 groupby()
函数可以方便地进行分组操作,比如:
-
分组计算:可以对每个组使用聚合函数进行计算,如 count、mean、sum 等。
-
分组筛选:可以筛选出符合条件的组的数据。
-
分组转换:不能使用聚合函数的情况下,可以对每个组数据进行自定义的转换。
-
分组排序:可以对每个组数据进行排序。
使用方法
groupby()
函数的基本使用方法为:
grouped = df.groupby(by)
其中 by
是指定的分类列,可以是列名、列标签、列索引、列索引的列表等。grouped
是一个分组对象,包含了每组数据的相关信息。常用的 groupby()
函数相关参数如下:
-
as_index=True/False
:表示分组后是否使用分组列作为索引,默认为 True。 -
sort=True/False
:表示是否对分组后的结果进行排序,默认为 True。 -
group_keys=True/False
:表示是否对分组键(by)进行索引,默认为 True。 -
squeeze=True/False
:表示当分组的结果只有一列时,是否进行压缩,默认为 True。 -
level=None
:表示按多级索引分组时,分组级别,默认为 None。
接下来,我们将演示两个具体的实例。
实例1 – 计算每个地区不同技能点的平均薪资
假设有一个 csv 文件,其中记录了各个地区的职位薪资和对应的行业和技能点信息。
import pandas as pd
# 读取数据
df = pd.read_csv('salary.csv')
# 按照 "地区" 和 "技能点" 进行分组,计算平均薪资
grouped = df.groupby(['地区', '技能点'])
result = grouped['职位薪资'].mean()
print(result)
输出结果为:
地区 技能点
上海市 Java开发 14.5
Python开发 16.0
北京市 Java开发 12.0
Python开发 14.0
广州市 Java开发 10.0
Python开发 11.0
深圳市 Java开发 13.5
Python开发 14.5
Name: 职位薪资, dtype: float64
以上代码首先读取数据,然后按照“地区”和“技能点”进行分组,最后对“职位薪资”列计算平均值。输出结果会显示各个地区和技能点对应的薪资平均值。
实例2 – 按照新冠疫情确诊人数区间筛选数据
假设有一个 csv 文件,其中记录了各个国家正面临的新冠疫情数据。
import pandas as pd
# 读取数据
df = pd.read_csv('covid.csv')
# 按照 "确诊人数" 分组,筛选出 "确诊人数" 大于 500,000 的数据
grouped = df.groupby(pd.cut(df['确诊人数'], [0, 100000, 500000, 1000000, 5000000, float('inf')]))
result = grouped['国家'].count()
print(result)
输出结果为:
确诊人数
(0.0, 100000.0] 111
(100000.0, 500000.0] 23
(500000.0, 1000000.0] 3
(1000000.0, 5000000.0] 8
(5000000.0, inf] 5
Name: 国家, dtype: int64
以上代码首先读取数据,然后按照“确诊人数”分组,并使用 pd.cut() 函数将“确诊人数”归为不同的区间,最后筛选出“确诊人数”大于 500,000 的数据,输出每个区间所包含的国家数。