详解pandas.groupby()(按列分组)函数使用方法

  • Post category:Python

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 的数据,输出每个区间所包含的国家数。