趋近智
数据分析常常需要根据类别的组合而不是单一类别来划分数据。例如,您可能希望计算的平均销售额不仅按区域划分,还要按每个区域内的产品划分。Pandas 的 groupby() 方法通过允许您同时按多列进行分组,使这变得简单易行。
按单列分组可以提供宽泛类别的汇总。按多列分组则可以进行更详细、分层的分析。它有助于回答以下问题:
这种多级分组相比单级聚合提供了更细致的见解。
要按多列分组,您只需向 groupby() 方法传递一个列名列表,而不是单个字符串。
让我们设置一个示例 DataFrame 来进行说明:
import pandas as pd
import numpy as np
# 示例销售数据
data = {'Region': ['North', 'South', 'North', 'South', 'North', 'South', 'North', 'South'],
'Product': ['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B'],
'Sales': [100, 150, 200, 50, 120, 180, 210, 80],
'Quantity': [10, 15, 20, 5, 12, 18, 21, 8]}
df_sales = pd.DataFrame(data)
print(df_sales)
输出:
Region Product Sales Quantity
0 North A 100 10
1 South A 150 15
2 North B 200 20
3 South B 50 5
4 North A 120 12
5 South A 180 18
6 North B 210 21
7 South B 80 8
现在,让我们同时按“Region”和“Product”分组,并计算每个组合的总销售额:
# 按“Region”和“Product”分组
grouped_multi = df_sales.groupby(['Region', 'Product'])
# 计算每个组的总销售额
total_sales_multi = grouped_multi['Sales'].sum()
print(total_sales_multi)
输出:
Region Product
North A 220
B 410
South A 330
B 130
Name: Sales, dtype: int64
请注意聚合结果 (total_sales_multi)。索引不再是简单的标签列表。相反,它有两层:“Region”和“Product”。这在 Pandas 中被称为 MultiIndex(或分层索引)。它代表了分组列的独特组合。
df_sales.groupby(['Region', 'Product']) 创建的 GroupBy 对象根据独有的对('North', 'A'),('North', 'B'),('South', 'A')和('South', 'B')来划分原始 DataFrame。然后,对这些划分中每个“Sales”列应用 sum() 聚合。
就像单列分组一样,您可以在按多列分组时对多列应用聚合,或使用多个聚合函数。
例如,让我们找出每个区域-产品组合的总销售额和平均数量:
# 对不同列应用不同的聚合
agg_results = grouped_multi.agg(
Total_Sales=('Sales', 'sum'),
Average_Quantity=('Quantity', 'mean')
)
print(agg_results)
输出:
Total_Sales Average_Quantity
Region Product
North A 220 11.0
B 410 20.5
South A 330 16.5
B 130 6.5
结果是一个 DataFrame,其索引是 MultiIndex(“Region”,“Product”),列则代表指定聚合的结果(“Total_Sales”,“Average_Quantity”)。
您也可以对同一列应用多个聚合函数:
# 对“Sales”列应用多个聚合
sales_stats = grouped_multi['Sales'].agg(['sum', 'mean', 'count'])
print(sales_stats)
输出:
sum mean count
Region Product
North A 220 110.0 2
B 410 205.0 2
South A 330 165.0 2
B 130 65.0 2
这提供了每个独特(“Region”,“Product”)对的销售额的总和、平均值和计数。
按多列分组是一种有效方法,用于进行详细的类别分析,允许您根据多种因素组合来汇总数据。生成的 MultiIndex 结构能有效表示这些分层分组。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造