0

0

利用Pandas按字典映射聚合DataFrame列

碧海醫心

碧海醫心

发布时间:2025-11-07 14:04:01

|

519人浏览过

|

来源于php中文网

原创

利用pandas按字典映射聚合dataframe列

本文将详细介绍如何使用Pandas高效地根据一个字典来聚合DataFrame的列。该字典定义了新的列名及其对应的原始DataFrame列列表。我们将探讨两种Pythonic且高效的方法:一种利用`groupby(axis=1)`进行列分组求和,另一种则通过转置DataFrame来适应新版Pandas中`groupby`行为的变化,确保解决方案的兼容性和性能。

在数据分析和处理中,我们经常需要根据特定的规则对DataFrame的列进行组合或聚合。一个常见的场景是,我们有一个DataFrame和一份映射字典,字典的键是新的列名,值是需要聚合的原始DataFrame列名的列表。例如,如果字典中'x': ['A', 'D'],则新的DataFrame中的'x'列应该是原始DataFrame中'A'和'D'列的行级和。本教程将展示如何以Pandas的惯用方式(Pythonic)实现这一目标,避免使用低效的循环。

示例数据准备

首先,我们创建用于演示的DataFrame和映射字典:

import pandas as pd

df = pd.DataFrame([[4, 8, 52, 7, 54],
                   [0, 20, 2, 21, 35],
                   [2, 33, 12, 1, 87]],
                  columns=['A', 'B', 'C', 'D', 'E'])

dic = {'x': ['A', 'D'], 'y': ['E'], 'z': ['B', 'C']}

print("原始DataFrame:")
print(df)
print("\n映射字典:")
print(dic)

原始DataFrame df 如下:

   A   B   C   D   E
0  4   8  52   7  54
1  0  20   2  21  35
2  2  33  12   1  87

我们的目标是生成一个新DataFrame,其中包含 x, y, z 三列,分别对应 (A+D), (E), (B+C) 的行级和。

方法一:利用 rename 和 groupby(axis=1)

这种方法的核心思想是:首先创建一个“逆向”字典,将原始列名映射到它们应该归属的新列名。然后,利用 df.rename() 临时性地将DataFrame的列名修改为这些新的聚合组名。最后,通过 groupby(level=0, axis=1).sum() 对具有相同新列名的列进行分组求和。

  1. 创建逆向字典 d2: 这个字典将原始列名作为键,新的聚合列名作为值。 例如,'A' 应该映射到 'x','D' 也应该映射到 'x'。

    d2 = {v: k for k, l in dic.items() for v in l}
    print("\n逆向字典 d2:")
    print(d2)

    输出 d2:

    万彩商图
    万彩商图

    专为电商打造的AI商拍工具,快速生成多样化的高质量商品图和模特图,助力商家节省成本,解决素材生产难、产图速度慢、场地设备拍摄等问题。

    下载
    {'A': 'x', 'D': 'x', 'E': 'y', 'B': 'z', 'C': 'z'}
  2. 重命名列并分组求和: 使用 df.rename(columns=d2) 将 df 的列名根据 d2 进行重命名。 例如,列 A 和 D 都会被重命名为 x。 然后,groupby(level=0, axis=1).sum() 会沿着列方向(axis=1)对具有相同名称的列进行分组,并计算它们的和。level=0 在这里是默认值,表示按列名本身进行分组。

    out_method1 = df.rename(columns=d2).groupby(level=0, axis=1).sum()
    print("\n方法一结果:")
    print(out_method1)

    输出结果:

        x   y   z
    0  11  54  60
    1  21  35  22
    2   3  87  45

    这里的 x 列是 A+D 的和 (4+7=11, 0+21=21, 2+1=3),y 列是 E 的值,z 列是 B+C 的和 (8+52=60, 20+2=22, 33+12=45)。

方法二:利用转置 (.T) 和 groupby (适用于新版Pandas)

在某些较新版本的Pandas中,直接在 groupby 中使用 axis=1 可能会被弃用。为了保持兼容性并提供另一种高效的解决方案,我们可以利用DataFrame的转置操作。

  1. 创建逆向字典 d2: 这一步与方法一相同,因为我们需要相同的映射关系。

    d2 = {v: k for k, l in dic.items() for v in l}
  2. 转置、重命名、分组求和并再次转置:

    • df.T: 将DataFrame转置,原始列变为索引,原始索引变为列。
    • .rename(d2): 此时 d2 会作用于转置后DataFrame的索引(即原始的列名)。这样,原始列 A, D 对应的索引都会被重命名为 x。
    • .groupby(level=0).sum(): 对转置后DataFrame的索引(现在是新的聚合组名)进行分组求和。
    • .T: 再次转置,将结果恢复到原始的行/列布局。
    out_method2 = df.T.rename(d2).groupby(level=0).sum().T
    print("\n方法二结果:")
    print(out_method2)

    输出结果与方法一相同:

        x   y   z
    0  11  54  60
    1  21  35  22
    2   3  87  45

注意事项与总结

  • Pythonic与效率: 这两种方法都避免了显式循环,利用了Pandas底层的优化C/Cython实现,因此在大规模数据集上表现出更高的效率。
  • 灵活性: 这种模式非常灵活,不仅限于求和,还可以用于其他聚合操作(如 mean, max, min 等),只需将 .sum() 替换为相应的聚合函数即可。
  • 版本兼容性: 方法一在多数Pandas版本中都有效,但方法二提供了对未来版本更强的兼容性,以防 groupby(axis=1) 被完全弃用。建议在生产环境中使用方法二。
  • 字典理解: d2 = {v: k for k, l in dic.items() for v in l} 是一个高效且简洁的字典理解,用于反转和扁平化字典结构。

通过上述方法,我们可以优雅且高效地根据自定义的字典映射关系来聚合DataFrame的列,这在数据清洗、特征工程等场景中非常实用。掌握这些Pandas技巧将显著提升数据处理的效率和代码的可读性。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

48

2025.12.04

数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

447

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

258

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

716

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

498

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

71

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

54

2025.10.14

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

0

2025.12.24

php框架基础知识汇总
php框架基础知识汇总

php框架是构建web应用程序的架构,提供工具和功能,以简化开发过程。选择合适的框架取决于项目需求和技能水平。实战案例展示了使用laravel构建博客的步骤,包括安装、创建模型、定义路由、编写控制器和呈现视图。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号