新闻中心
利用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() 对具有相同新列名的列进行分组求和。
-
创建逆向字典 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
告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项
135
查看详情
{'A': 'x', 'D': 'x', 'E': 'y', 'B': 'z', 'C': 'z'} -
重命名列并分组求和: 使用 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的转置操作。
-
创建逆向字典 d2: 这一步与方法一相同,因为我们需要相同的映射关系。
d2 = {v: k for k, l in dic.items() for v in l} -
转置、重命名、分组求和并再次转置:
- 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技巧将显著提升数据处理的效率和代码的可读性。
以上就是利用Pandas按字典映射聚合DataFrame列的详细内容,更多请关注其它相关文章!
# 适用于
# 精准营销推广平台
# google评估seo
# 崇明网站建设管理
# 沈阳效果好的网站推广
# 窗帘模型网站建设
# 是谁推广饥饿营销的理由
# 营销推广服务费合同范本
# 网站分析和seo
# 汕尾网站建设费用
# 揭阳seo白帽技术
# 我们可以
# python
# 只需
# 两种
# 还可以
# 在这里
# 是一个
# 命名为
# 重命名
# 如何使用
# 聚合函数
# 数据清洗
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?
Win11怎么用U盘重装系统 Win11制作启动盘并重装系统完整教程【详解】
J*aScript动态修改指定div内所有a标签样式指南
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
LocoySpider如何部署到云服务器_LocoySpider云部署的远程配置
Mac怎么锁定备忘录_Mac备忘录加密设置教程
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
在Runstone环境中高效处理TasteDive API的JSON数据
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
微信网页版官方入口教程 微信网页版网页版快速登录步骤
Mac终端命令大全_Mac常用Terminal指令速查
Win11怎么安装Linux子系统 Win11 WSL2安装Ubuntu及环境配置指南
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
Python类型检查:优化关联可选属性的Mypy推断策略
AO3最新入口2025公告_AO3中文官网合集
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
Angular Material 垂直步进器:实现底部到顶部排序的教程
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
Node.js中HTML按钮与J*aScript函数交互的正确姿势
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
J*aScript实现单选按钮与关联输入框的联动禁用教程
网站内容防复制粘贴的实现策略与局限性
期待已久:小米17 Ultra、小米首款NAS本月登场
AO3官方在线访问地址 Archive of Our Own最新镜像合集
修复二维数组索引越界异常:一维循环到二维坐标的正确映射
Archive of Our Own官网直达 AO3最新可用地址一览
msn官网入口地址手机版 msn官方网站手机最新链接
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
J*a TimerTask文件监控:HashMap状态管理与常见陷阱规避指南
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析
在Socket.IO连接中实现Access Token自动更新与动态重连
qq游戏网页版直接玩_qq游戏免下载快速入口
Typer应用中灵活处理命令行参数的令牌化与解析
使用Python高效删除Word宏并转换DOCM为DOCX格式
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
SteamMachine定价或为699美元 大家想入手吗?
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
css滚动动画效果怎么实现_使用Animate.css滚动触发动画类
CSS如何设置hover状态颜色_hover伪类调整背景或文字颜色
Golang如何安装Swagger工具_GoSwagger文档生成环境
12306几点到几点不能订票? | 官方最新系统维护时间全解析
漫蛙漫画网页端入口 漫蛙2官方正版漫画站点
微信网页版官方快速登录入口 微信网页版网页版账号直达
C++如何实现单例模式_C++设计模式之线程安全的单例写法
电脑IP地址怎么查 查看本机IP地址的几种方法
JUnit5/Mockito:优雅测试内部依赖与异常处理的实践


2025-11-07
浏览次数:次
返回列表
字典将原始列名作为键,新的聚合列名作为值。
例如,'A' 应该映射到 'x','D' 也应该映射到 'x'。