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函数,我们可以快速实现对数据的分组和聚合操作,进一步提高数据分析的效率。