Python Pandas分组聚合的实现方法

  • Post category:Python

PythonPandas分组聚合的实现方法

什么是分组聚合?

在数据分析中,我们经常需要根据某些特征来对数据进行分组,然后对每个组内的数据进行一些统计分析,例如计算每组的均值、中位数、标准差等等。这个过程就叫做分组聚合。

PythonPandas实现分组聚合的方法

在Python的数据分析库中,Pandas提供了非常便捷的分组聚合功能。下面就来介绍一下如何利用Pandas实现分组聚合。

准备工作

在开始之前,我们需要先导入Pandas和Numpy库。

import pandas as pd
import numpy as np

分组聚合的基本语法

Pandas中实现分组聚合的基本语法如下:

grouped = df.groupby('key')
result = grouped.agg(func)

其中,df是一个DataFrame对象,’key’是分组依据的列名,func是一个或者多个聚合函数,如sum、mean、min、max等等。groupby方法将数据按照key列进行分组,而agg方法则对每个组执行聚合操作。

示例一

假设我们想要对下面的数据按照gender进行分组,然后计算每个组的平均年龄和薪资:

data = {'name':['Tom','Jack','Rose','David','Mike','Mary'],
        'gender':['M','M','F','M','M','F'],
        'age':[25,27,22,30,28,24],
        'salary':[5000,6000,5500,7000,6500,5800]}
df = pd.DataFrame(data)

分组聚合的代码如下:

grouped = df.groupby('gender')
result = grouped.agg({'age':'mean', 'salary':'mean'})
print(result)

输出结果如下:

              age       salary
gender                        
F       23.000000  5650.000000
M       26.666667  6166.666667

示例二

假设我们有一份电子商务网站的销售数据,其中包含了许多购物订单。我们想要统计每个用户的总销售额,并找出销售额最高的前10名用户。

数据如下:

data = {'user_id':[1001,1001,1002,1002,1002,1003,1004,1004,1004,1005],
        'order_id':['a01','a02','a03','a04','a05','a06','a07','a08','a09','a10'],
        'price':[100,200,150,100,300,400,250,180,200,80]}
df = pd.DataFrame(data)

计算每个用户的总销售额:

grouped = df.groupby('user_id')
result = grouped.agg({'price': 'sum'})

找出销售额最高的前10名用户:

result = result.sort_values('price', ascending=False)[:10]
print(result)

输出结果如下:

         price
user_id       
1002       550
1003       400
1004       630
1001       300
1005        80

结论

利用Pandas进行分组聚合是非常方便的。只需要使用groupby和agg两个方法,就可以完成大部分的数据统计分析任务。在实际的工作中,我们还可以使用很多高级的聚合函数以及自定义的聚合方法,对数据进行更加复杂的分析。