新闻中心
使用 Pandas 根据字典映射聚合 DataFrame 列

本文详细介绍了如何利用 Pandas 库高效地根据一个字典来聚合 DataFrame 中的列。通过将原始列名映射到新的分组键,并结合 `rename` 和 `groupby.sum` 方法,或者在较新版本 Pandas 中采用转置 (`.T`) 的策略,我们可以实现将多个指定列按行求和并创建新列的需求,避免了传统循环的低效,提升了代码的简洁性和执行效率。
在数据处理中,我们经常会遇到需要将 DataFrame 中的多列按照某种规则进行聚合,生成新的列。例如,给定一个 DataFrame 和一个字典,该字典的键代表新的列名,值则是一个包含现有列名的列表,表示这些现有列需要按行求和以构成新的列。传统上,这可能通过循环实现,但在 Pandas 中,有更“Pythonic”且高效的向量化方法。
场景描述与初始数据准备
假设我们有一个 Pandas 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:
A B C D E
0 4 8 52 7 54
1 0 20 2 21 35
2 2 33 12 1 87
聚合字典:
{'x': ['A', 'D'], 'y': ['E'], 'z': ['B', 'C']}我们的目标是创建一个新的 DataFrame,其中包含 'x', 'y', 'z' 三列。列 'x' 的值是原始 DataFrame 中 'A' 和 'D' 列的按行和;列 'y' 是 'E' 列的值;列 'z' 是 'B' 和 'C' 列的按行和。
解决方案一:利用 rename 和 groupby.sum
这种方法的核心思想是:首先创建一个反向映射字典,将原始列名映射到它们所属的新分组名。然后,利用 df.rename(columns=d2) 临时“重命名”列,使得属于同一分组的列拥有相同的名称。最后,使用 groupby(level=0, axis=1).sum() 对这些具有相同名称的列进行按行求和。
易标AI
告别低效手工,迎接AI标书新时代!3分钟智能生成,行业唯一具备查重功能,自动避雷废标项
135
查看详情
-
创建反向映射字典 d2: 这个字典将原始 DataFrame 的每个列名(如 'A', 'D')映射到其在结果 DataFrame 中对应的列名(如 'x')。
d2 = {v:k for k,l in dic.items() for v in l} print("\n反向映射字典:") print(d2)输出:
反向映射字典: {'A': 'x', 'D': 'x', 'E': 'y', 'B': 'z', 'C': 'z'} -
重命名列并进行分组求和:df.rename(columns=d2) 会将 DataFrame 的列名根据 d2 进行转换。例如,'A' 和 'D' 都会被临时命名为 'x'。 groupby(level=0, axis=1).sum() 的作用是:
- axis=1 表示按列进行分组操作。
- level=0 在这里指的是列名本身。由于重命名后,属于同一分组的列现在具有相同的名称,groupby 会将它
们视为一个组。 - .sum() 则对每个组内的列进行求和,由于 axis=1,这实际上是按行求和。
out = df.rename(columns=d2).groupby(level=0, axis=1).sum() print("\n解决方案一结果:") print(out)输出:
解决方案一结果: x y z 0 11 54 60 1 21 35 22 2 3 87 45
解决方案二:利用转置 (.T) 处理(适用于较新 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 会作用于转置后的索引(即原来的列名)。
- .groupby(level=0).sum():在转置后的 DataFrame 上,level=0 指的是当前的行索引。具有相同索引值的行(即原 DataFrame中属于同一分组的列)会被聚合求和。
- .T:最后再次转置,将结果恢复到我们期望的列式结构。
out_transposed = df.T.rename(d2).groupby(level=0).sum().T print("\n解决方案二(转置)结果:") print(out_transposed)输出:
解决方案二(转置)结果: x y z 0 11 54 60 1 21 35 22 2 3 87 45
总结与注意事项
- Pythonic 与效率: 这两种方法都充分利用了 Pandas 的向量化操作,避免了显式的 Python 循环,因此在处理大规模数据时具有显著的性能优势。它们比手动迭代 DataFrame 的行和列要高效得多。
- 灵活性: 这种方法非常灵活,只要能够构建出正确的映射字典,就可以根据任意复杂的列分组规则进行聚合。
- groupby(level=0, axis=1) 的理解: level=0 在这里指的是 DataFrame 的列索引的第一个(也是唯一一个)级别。当列名被 rename 映射后,具有相同映射值的列在 groupby 时会被视为一个组。
- 转置方法的适用性: 当遇到 groupby 在 axis=1 上的使用被提示弃用时,转置方法是一个很好的替代方案,它在功能上完全等价。
- 错误处理: 在实际应用中,需要确保 dic 中引用的所有列名都存在于 df 中,否则 rename 操作可能会导致错误或意外行为。
通过掌握这些 Pandas 技巧,您可以更高效、更简洁地完成 DataFrame 列的聚合任务,从而提升数据处理的效率和代码的可维护性。
以上就是使用 Pandas 根据字典映射聚合 DataFrame 列的详细内容,更多请关注其它相关文章!
# 很好
# 便利的网站推广
# seo外推软件蜘蛛池
# 上海网站建设技术
# 吉林昌吉网站建设
# 服装网站建设要素
# 奉节网站建设效果
# 抖音关键词搜索排名费用一览表
# 泰宁网站建设招标公告最新
# 德州网络seo价格
# seo竞争对手数量
# python
# 其中包含
# 是一个
# 如何实现
# 创建一个
# 会将
# 数据处理
# 在这里
# 指的是
# 重命名
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Lar*el如何生成PDF或Excel文件_Lar*el文档导出工具与使用教程
魅族17怎样用浏览器译外语网页_iPhone魅族17浏览器译外语网页【即时翻译】
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略
2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析
圆通快递查询实时追踪 圆通物流包裹状态快速查看
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
UE5.7引擎表现爆炸优化无敌!5090跑4K稳定60FPS
Lar*el Form Request中唯一性验证在更新操作中的正确实现
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
html5 app怎么运行环境_配html5 app运行环境【教程】
小红书商家版怎样在笔记嵌入商品卡路径_小红书商家版在笔记嵌入商品卡路径【挂载教程】
谷歌浏览器最新官方入口链接 谷歌浏览器网页版官网导航
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
Discord Slash 命令响应超时问题的异步解决方案
Excel Power Pivot如何处理XML数据源 构建高级数据模型
mc.js官网登录入口 mc.js官方登录入口最新版
NetBeans Ant项目:自动化将资源文件复制到dist目录的教程
Typer应用中灵活处理命令行参数的令牌化与解析
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
Python模块化编程:有效管理依赖与避免循环引用
《燕云十六声》两周内达九百万玩家!位居畅销榜第五
Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践
响应式容器内容自动缩放与宽高比维持教程
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
lar*el怎么安全地存储和获取配置文件中的敏感信息_lar*el敏感信息安全存储方法
Django表单提交验证失败后保持字段值不刷新
处理Kafka消费者会话超时:深入理解消息处理语义与幂等性
在Go Martini框架中高效服务动态生成图像的实践指南
微信网页版扫码登录入口 微信网页版二维码登录入口
AO3中文官网链接_AO3网页版稳定镜像站
深入理解与实现最大堆的Heapify过程:常见错误与修正
Go语言中动态执行代码字符串的策略与实践
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
J*aScript:在map操作中高效处理空数组
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
j*a toString()的覆盖
CSS图片焦点样式实现教程:理解与应用tabindex属性
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
自定义Bag-of-Words实现:处理带负号的词汇权重
消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技
电脑IP地址怎么查 查看本机IP地址的几种方法
新三国志曹操传110级星符试炼夏侯渊极难攻略
离线运行Go语言之旅:本地部署与GOPATH配置指南
qq游戏免费畅玩入口_qq游戏电脑版快速启动
poki免费入口快捷访问 poki人气小游戏直接玩站点
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南


2025-11-04
浏览次数:次
返回列表
们视为一个组。