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

1. python中分组函数groupby的使用

在Python中,我们经常需要对数据进行分组处理,例如将一批数据按照某个字段进行分组,然后对每个组进行计算。这时候就需要用到groupby函数。groupby函数的作用是将一个数据集按照某个字段分组,返回一个GroupBy对象,可以对这个对象进行各种操作。

1.1 groupby函数的语法

groupby(self, by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, **kwargs)

参数说明:

- by:用于分组的列名或者列名的列表

- axis:指定分组的轴,0表示按行分组,1表示按列分组,默认为0

- level:用于递归分组的级别

- as_index:是否以分组列作为索引

- sort:是否对分组键排序,默认为True

- group_keys:是否将分组键添加到结果中

- squeeze:是否在分组一组时返回一个Series对象

1.2 groupby函数的返回值

groupby函数的返回值是一个GroupBy对象,我们可以对这个对象进行各种操作,例如调用sum、mean等函数进行计算,也可以使用apply方法进行复杂计算。

1.3 groupby函数的示例

# 导入pandas库

import pandas as pd

# 创建一个数据集

data = {

"City": ["Beijing", "Beijing", "Shanghai", "Shanghai", "Guangzhou", "Guangzhou"],

"Year": [2020, 2021, 2020, 2021, 2020, 2021],

"GDP": [100, 120, 80, 100, 60, 70]

}

df = pd.DataFrame(data)

print(df)

# 按照City列进行分组

grouped = df.groupby("City")

# 对每个组求和

result = grouped.sum()

print(result)

输出结果:

City Year GDP

0 Beijing 2020 100

1 Beijing 2021 120

2 Shanghai 2020 80

3 Shanghai 2021 100

4 Guangzhou 2020 60

5 Guangzhou 2021 70

Year GDP

City

Beijing 4041 220

Guangzhou 4041 130

Shanghai 4041 180

从输出结果可以看出,我们按照City列分组后,对每组的GDP求和,得到了新的DataFrame对象。

2. python中分组运算函数agg的使用

除了上面介绍的使用sum、mean等函数对每组进行计算外,我们还可以使用agg函数进行复杂的分组运算。agg函数可以接受一个函数或者一个函数列表作为参数,对每个组进行计算。

2.1 agg函数的语法

agg(self, func, *args, **kwargs)

参数说明:

- func:可以是一个函数或者一个函数列表,用于对每个组进行计算

- *args, **kwargs:传递给func函数的其他参数

2.2 agg函数的示例

# 导入pandas库

import pandas as pd

# 创建一个数据集

data = {

"City": ["Beijing", "Beijing", "Shanghai", "Shanghai", "Guangzhou", "Guangzhou"],

"Year": [2020, 2021, 2020, 2021, 2020, 2021],

"GDP": [100, 120, 80, 100, 60, 70],

"Population": [2000, 2200, 2500, 2600, 1800, 1900]

}

df = pd.DataFrame(data)

print(df)

# 按照City列进行分组,对每组的GDP和Population求和,计算GDP占比

grouped = df.groupby("City").agg({"GDP": "sum", "Population": "sum"})

grouped["GDP_Percent"] = grouped["GDP"] / grouped["GDP"].sum()

print(grouped)

输出结果:

City Year GDP Population

0 Beijing 2020 100 2000

1 Beijing 2021 120 2200

2 Shanghai 2020 80 2500

3 Shanghai 2021 100 2600

4 Guangzhou 2020 60 1800

5 Guangzhou 2021 70 1900

GDP Population GDP_Percent

City

Beijing 220 420 0.408163

Guangzhou 130 370 0.244898

Shanghai 180 510 0.346939

从输出结果可以看出,我们按照City列分组后,对每组的GDP和Population进行求和,然后计算每组的GDP占比。

总结

本文主要介绍了Python中分组函数groupby和分组运算函数agg的使用。通过groupby函数,我们可以对一个数据集按照某个字段进行分组,然后对每个组进行计算;通过agg函数,我们可以进行复杂的分组运算,对每个组进行计算。这些函数在数据处理的过程中非常实用,希望读者在实际工作中能够熟练运用。

后端开发标签