如何使用Pandas根据字典定义聚合DataFrame列

来源:站长平台作者:椎名光头衔:网络博主
导读:本期聚焦于小伙伴创作的《如何使用Pandas根据字典定义聚合DataFrame列》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何使用Pandas根据字典定义聚合DataFrame列》有用,将其分享出去将是对创作者最好的鼓励。

在使用Pandas处理结构化数据时,分组聚合是核心操作之一,当需要对不同列应用不同的聚合逻辑时,通过字典定义聚合规则是一种非常灵活的方式,能够避免重复编写大量聚合代码,提升开发效率。

如何使用Pandas根据字典定义聚合DataFrame列

字典聚合的基本规则

使用字典定义聚合规则时,字典的键对应DataFrame中需要聚合的列名,值对应该列需要应用的聚合函数。聚合函数可以是Pandas内置的字符串别名,也可以是自定义的函数,还可以是函数组成的列表,实现对单列的多维度聚合。

基础字典结构示例

首先我们创建一个示例DataFrame用于演示:

import pandas as pd

# 创建示例数据
data = {
    "category": ["A", "A", "B", "B", "A", "B"],
    "value1": [10, 20, 30, 40, 50, 60],
    "value2": [1.5, 2.5, 3.5, 4.5, 5.5, 6.5],
    "count": [100, 200, 300, 400, 500, 600]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)

上述代码创建的DataFrame包含分类列category和三个数值列,接下来我们定义字典实现不同列的聚合。

单列单聚合函数的字典配置

当每个列只需要应用一个聚合函数时,字典的值直接传入对应的函数别名即可,常用的内置别名包括sum、mean、max、min、count等。

# 定义聚合字典:value1求总和,value2求平均值,count求最大值
agg_dict = {
    "value1": "sum",
    "value2": "mean",
    "count": "max"
}

# 按category分组后应用聚合字典
result = df.groupby("category").agg(agg_dict)
print("n单列单聚合结果:")
print(result)

运行后可以看到,A类和B类的value1分别计算了总和,value2计算了平均值,count取了最大值,符合字典定义的规则。

单列多聚合函数的字典配置

如果需要对同一列应用多个聚合函数,可以将字典的值设置为函数组成的列表,此时聚合结果的列名会自动拼接列名和函数名。

# 定义聚合字典:value1同时求总和和平均值,value2求最大值和最小值
agg_dict_multi = {
    "value1": ["sum", "mean"],
    "value2": ["max", "min"]
}

# 执行聚合操作
result_multi = df.groupby("category").agg(agg_dict_multi)
print("n单列多聚合结果:")
print(result_multi)

此时结果会生成多级列索引,第一级是原始列名,第二级是对应的聚合函数名,方便区分不同聚合结果。

使用自定义函数的字典聚合

除了内置函数,我们还可以在字典中传入自定义函数,自定义函数需要接收一个Series作为输入,返回一个标量作为聚合结果。

# 自定义聚合函数:计算数值的范围(最大值减最小值)
def value_range(s):
    return s.max() - s.min()

# 定义包含自定义函数的聚合字典
agg_dict_custom = {
    "value1": value_range,
    "count": "sum"
}

# 执行聚合
result_custom = df.groupby("category").agg(agg_dict_custom)
print("n自定义函数聚合结果:")
print(result_custom)

上述代码中,value1列应用了自定义的value_range函数计算数值范围,count列应用了内置的sum函数求和。

重命名聚合列的字典配置

默认的多聚合函数结果列名不够直观,我们可以通过将字典的值设置为元组列表的方式,实现聚合函数的同时重命名列名,元组格式为(新列名, 聚合函数)。

# 定义带重命名的聚合字典
agg_dict_rename = {
    "value1": [("总_value1", "sum"), ("均_value1", "mean")],
    "value2": [("最大_value2", "max"), ("最小_value2", "min")]
}

# 执行聚合
result_rename = df.groupby("category").agg(agg_dict_rename)
print("n重命名后的聚合结果:")
print(result_rename)

这种方式可以让聚合结果的列名更符合业务语义,提升结果的可读性。

注意事项

  • 字典的键必须是DataFrame中存在的列名,否则会抛出KeyError异常
  • 如果使用自定义函数,函数名不需要加引号,直接传入函数对象即可
  • 当聚合结果包含多级列索引时,可以通过result.columns = result.columns.droplevel(0)等方式调整索引层级
  • 对于字符串类型的列,也可以使用count、unique等适用的聚合函数

PandasDataFrame字典聚合groupby数据聚合修改时间:2026-07-23 23:03:17

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