当我们需要对数据进行分类并执行某种聚合操作时,可以使用group-by
方法。该方法可以将数据集按照指定的分类字段进行分组,然后依次对每个组执行指定的聚合函数。下面是Python中group-by
使用的攻略。
使用方法
group-by
方法属于pandas
库中的DataFrame
和Series
对象的一种聚合操作,其语法如下:
DataFrame.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
各参数的含义如下:
by
: 用于分组的列名或列名的列表。axis
: 分组操作的方向,0表示行方向,1表示列方向。level
: 如果对象具有层次化索引,则按照指定的level分组。as_index
: 布尔型值,表示分组的键是否作为索引,True表示是,False表示否。sort
: 布尔型值,表示分组之后是否进行排序。group_keys
: 布尔型值,表示返回对象是否包含分组键。squeeze
: 布尔型值,表示分组操作结果是否以Series形式返回。observed
: 布尔型值,表示分组键中是否包含所有观测值。
常用的聚合函数有以下几种:
count()
: 分组中非空数据的数量。sum()
: 分组中数据的和。mean()
: 分组中数据的平均数。median()
: 分组中数据的中位数。min()
: 分组中数据的最小值。max()
: 分组中数据的最大值。std()
: 分组中数据的标准差。var()
: 分组中数据的方差。
同时,我们还可以使用自定义函数来对分组后的数据进行聚合。
示例说明
下面给出两个具体的示例进行说明。
示例1
我们假设有一份购物订单数据,其中包含了买家姓名、购买产品类型、总价等字段。我们需要对数据进行分组,以产品类型为键,计算每种产品类型的订单数量与总金额。示例代码如下:
import pandas as pd
data = pd.DataFrame({
'Name': ['Bob', 'John', 'Alice', 'Lisa', 'David', 'Tony', 'Michael', 'Emily'],
'Product': ['Shoes', 'Clothes', 'Accessories', 'Shoes', 'Clothes', 'Accessories', 'Accessories', 'Shoes'],
'Price': [800, 1200, 300, 650, 900, 500, 750, 750]
})
grouped = data.groupby('Product')
result = grouped.agg({
'Name': 'count',
'Price': 'sum'
})
print(result)
输出结果如下:
Name Price
Product
Accessories 3 1550
Clothes 2 2100
Shoes 3 2200
示例2
我们再假设有一份学生成绩单,其中包含了学生姓名、所学科目、成绩等字段。我们需要对数据进行分组,以学生姓名为键,计算每个学生所有科目的平均成绩和总分数。示例代码如下:
import pandas as pd
data = pd.DataFrame({
'Name': ['Bob', 'John', 'Alice', 'Lisa', 'David', 'Bob', 'Michael', 'Emily'],
'Subject': ['Math', 'Math', 'Math', 'Math', 'Math', 'English', 'English', 'English'],
'Score': [80, 75, 85, 90, 70, 85, 90, 80]
})
grouped = data.groupby('Name')
result = grouped.agg({
'Score': ['mean', 'sum']
})
print(result)
输出结果如下:
Score
mean sum
Name
Alice 85 85
Bob 82 164
David 70 70
Emily 80 80
John 75 75
Lisa 90 90
Michael 90 90
通过上述示例,我们可以看到group-by
方法的实际应用方法。