导读:本期聚焦于小伙伴创作的《Pandas中如何实现数据的多级分组聚合?复杂分析技巧有哪些》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Pandas中如何实现数据的多级分组聚合?复杂分析技巧有哪些》有用,将其分享出去将是对创作者最好的鼓励。

在Pandas的数据处理流程中,多级分组聚合是处理多维度统计需求的核心操作,能够同时按照多个字段对数据集进行拆分,再对每个分组应用不同的聚合逻辑,输出符合分析要求的统计结果,广泛应用于业务报表生成、用户行为分析等场景。

Pandas中如何实现数据的多级分组聚合?复杂分析技巧有哪些

多级分组聚合的基础实现

Pandas中实现多级分组的核心是使用groupby方法传入多个分组字段,分组字段可以是列名组成的列表,之后结合agg方法指定每个字段的聚合规则。首先我们需要准备测试数据集,示例代码如下:

import pandas as pd

# 构造测试数据
data = {
    "region": ["华东", "华东", "华南", "华南", "华东", "华南"],
    "category": ["电子", "服饰", "电子", "服饰", "电子", "服饰"],
    "sales": [1200, 800, 1500, 900, 1100, 1000],
    "profit": [300, 200, 400, 250, 280, 300]
}
df = pd.DataFrame(data)
print(df)

上述代码生成的数据集包含区域、品类、销售额、利润四个字段,接下来我们按照区域和品类两个维度进行分组,同时计算销售额的总和与平均值、利润的总和,基础实现代码如下:

# 多级分组聚合基础用法
result = df.groupby(["region", "category"]).agg(
    sales_sum=("sales", "sum"),
    sales_mean=("sales", "mean"),
    profit_sum=("profit", "sum")
)
print(result)

执行后得到的分组结果会以区域和品类作为复合索引,每个分组对应一行统计结果,清晰展示不同区域下不同品类的销售和利润情况。

自定义聚合函数与多规则适配

除了使用Pandas内置的聚合函数(如sum、mean、count等),我们还可以在多级分组中应用自定义函数,满足特殊的统计需求。比如我们需要计算每个分组销售额的标准差,同时统计利润的最大值和最小值,示例代码如下:

# 自定义聚合函数
def calc_sales_std(series):
    return series.std()

# 多级分组应用自定义函数
result_custom = df.groupby(["region", "category"]).agg(
    sales_std=("sales", calc_sales_std),
    profit_max=("profit", "max"),
    profit_min=("profit", "min")
)
print(result_custom)

如果需要对同一个字段应用多种聚合规则,也可以使用更简洁的写法,比如同时计算销售额的总和、平均值、最大值:

# 同一字段多聚合规则
result_multi = df.groupby(["region", "category"])["sales"].agg(["sum", "mean", "max"])
print(result_multi)

分组结果的结构调整技巧

多级分组默认生成的复合索引有时不便于后续的数据处理,我们可以通过重置索引或者调整索引层级来优化结果结构。如果需要将复合索引转为普通列,可以使用reset_index方法:

# 重置索引,将分组字段转为普通列
result_reset = result.reset_index()
print(result_reset)

如果需要交换复合索引的层级顺序,可以使用swaplevel方法,示例代码如下:

# 交换索引层级,先品类后区域
result_swap = result.swaplevel("category", "region")
print(result_swap)

复杂分析场景的实用技巧

分组后过滤数据

在多级分组聚合之后,我们可能需要过滤掉不符合条件的分组,比如只保留销售额总和大于2000的分组,可以使用filter方法实现:

# 分组后过滤,保留销售额总和大于2000的分组
filtered_result = df.groupby(["region", "category"]).filter(lambda x: x["sales"].sum() > 2000)
print(filtered_result)

交叉表与透视表结合

对于多级分组的多维度分析需求,也可以结合pivot_table方法实现更灵活的结果展示,比如生成区域为行、品类为列、销售额为值的透视表:

# 透视表实现多维度聚合
pivot_result = pd.pivot_table(
    df,
    values="sales",
    index="region",
    columns="category",
    aggfunc="sum",
    fill_value=0
)
print(pivot_result)

分组结果排序

多级分组后的结果可以按照指定字段进行排序,比如按照销售额总和降序排列,示例代码如下:

# 按照销售额总和降序排序
result_sorted = result.sort_values(by="sales_sum", ascending=False)
print(result_sorted)

注意事项

在使用多级分组聚合时,需要注意分组字段的数据类型,如果分组字段存在缺失值,默认情况下缺失值对应的行会被自动排除在分组之外,如果需要保留缺失值分组,可以在groupby方法中设置dropna=False。另外,自定义聚合函数需要能够接收Series类型的输入并返回标量值,否则会抛出类型错误。

Pandas多级分组聚合groupbyagg复杂数据分析修改时间:2026-06-27 19:54:31

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。