Python技巧分享之groupby基础用法详解

1. 什么是groupby?

groupby 是pandas库中的一个函数,可以实现按照某个或多个列对数据进行分组,并将每个组中的数据聚合为一个整体。在分析数据时,常常需要按照某个属性对数据进行分类和汇总,groupby可以方便地满足这个需求。

2. groupby的基本用法

2.1 按照单列分组

最基本的用法是按照单个列进行分组。以一个示例数据为例,假设我们有一个销售数据表,包含了商品名称、销售额和销售日期等信息:

import pandas as pd

data = {'商品名称': ['苹果', '香蕉', '苹果', '橙子', '香蕉'],

'销售额': [100, 200, 150, 180, 250],

'销售日期': ['2021-01-01', '2021-01-01', '2021-01-02', '2021-01-02', '2021-01-03']}

df = pd.DataFrame(data)

现在我们想要统计每个商品的总销售额,可以使用groupby对商品名称进行分组,并对销售额进行求和:

grouped = df.groupby('商品名称')

result = grouped['销售额'].sum()

print(result)

运行结果如下:

商品名称

橙子 180

苹果 250

香蕉 450

Name: 销售额, dtype: int64

通过groupby函数,我们可以快速统计每个商品的总销售额。

2.2 按照多列分组

除了按照单个列进行分组外,我们还可以按照多个列进行分组。例如,如果我们想要统计每个商品每天的销售额,可以同时按照商品名称和销售日期两列进行分组:

grouped = df.groupby(['商品名称', '销售日期'])

result = grouped['销售额'].sum()

print(result)

运行结果如下:

商品名称 销售日期

橙子 2021-01-02 180

苹果 2021-01-01 100

2021-01-02 150

香蕉 2021-01-01 200

2021-01-03 250

Name: 销售额, dtype: int64

通过多列分组,我们可以得到每个商品每天的销售额。

3. groupby的高级用法

3.1 自定义聚合函数

在上面的例子中,我们使用了sum函数对销售额进行求和。除了内置的聚合函数外,我们还可以自定义聚合函数。

例如,如果我们想要计算每个商品的销售额的均值、最大值和最小值,可以自定义一个函数来实现:

def custom_agg(x):

result = {

'销售额均值': x.mean(),

'销售额最大值': x.max(),

'销售额最小值': x.min()

}

return pd.Series(result)

grouped = df.groupby('商品名称')

result = grouped['销售额'].apply(custom_agg)

print(result)

运行结果如下:

商品名称

橙子 销售额均值 180

销售额最大值 180

销售额最小值 180

苹果 销售额均值 125

销售额最大值 150

销售额最小值 100

香蕉 销售额均值 225

销售额最大值 250

销售额最小值 200

dtype: int64

通过自定义聚合函数,我们可以灵活地计算每个商品的销售额的均值、最大值和最小值。

3.2 按照某列的值排序

在分组后的结果中,我们也可以根据某列的值进行排序。以商品销售额均值为例,如果我们想要按照销售额均值降序排列:

grouped = df.groupby('商品名称')

result = grouped['销售额'].mean().sort_values(ascending=False)

print(result)

运行结果如下:

商品名称

香蕉 225

橙子 180

苹果 125

Name: 销售额, dtype: int64

通过按照某列的值进行排序,我们可以得到某个属性在不同组中的排序情况。

4. 总结

本文介绍了groupby的基础用法和高级用法,包括按照单列分组、按照多列分组、自定义聚合函数和按照某列的值排序等。通过灵活运用groupby函数,我们可以快速实现对数据的分组和聚合操作,进一步提高数据分析的效率。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签