Pandas DataFrame中基于键匹配与计数的智能值分配教程

Pandas DataFrame中基于键匹配与计数的智能值分配教程

本教程详细阐述了如何在Pandas中处理两个DataFrame,一个包含重复键,另一个包含唯一键及其关联数据。核心任务是将第二个DataFrame中的值根据第一个DataFrame中键的出现次数进行拆分并分配,最终生成一个合并后的新DataFrame。文章通过结合merge、value_counts和div等Pandas函数,提供了一种高效且结构化的解决方案,确保数据按比例正确分配,并详细解释了实现步骤与代码细节。

问题概述

在数据分析和处理中,我们经常会遇到需要整合来自不同数据源的信息。一个常见场景是,我们有两个dataframe:

DataFrame 1 (DF_1): 包含一个或多个键列,其中键值可能重复出现,代表了需要分配数据的记录。DataFrame 2 (DF_2): 包含与DF_1中键对应的唯一键值,以及与这些键关联的详细数据列。

我们的目标是创建一个新的DataFrame,它基于DF_1的结构,但DF_2中的数值列已根据DF_1中对应键的出现次数进行了“拆分”或“分配”。例如,如果DF_2中键’A’的值是100,而DF_1中’A’出现了4次,那么在最终结果中,每个’A’对应的数值应为25 (100 / 4)。

核心思路与Pandas函数

解决此类问题的关键在于以下几个Pandas操作的组合:

计数键的频率 (value_counts()): 首先,我们需要知道DF_1中每个键出现了多少次。Series.value_counts()函数能够高效地完成这项任务。按频率拆分/标准化值 (div()): 得到每个键的频率后,我们可以使用DataFrame.div()函数将DF_2中对应键的数值列除以其在DF_1中的出现频率。这实现了值的按比例拆分。合并数据 (merge()): 最后,将经过标准化处理的DF_2与原始的DF_1根据键列进行合并,以生成最终结果。

示例数据准备

为了更好地说明,我们使用以下示例数据来模拟问题场景:

import pandas as pdimport numpy as np# DataFrame 1 (DF_1): 包含重复键data1 = {'id': ['A', 'B', 'A', 'C', 'A', 'A', 'C']}df1 = pd.DataFrame(data1)print("DF_1:")print(df1)# DataFrame 2 (DF_2): 包含唯一键和数据值data2 = {'id': ['A', 'B', 'C'],         'Col1': [400, 200, 600],         'Col2': [100, np.nan, 800],         'Col3': [20, 800, np.nan]}df2 = pd.DataFrame(data2)print("nDF_2:")print(df2)

DF_1:

  id0  A1  B2  A3  C4  A5  A6  C

DF_2:

  id  Col1   Col2   Col30  A   400  100.0   20.01  B   200    NaN  800.02  C   600  800.0    NaN

实现步骤与代码示例

以下是实现所需功能的Pandas代码:

out = (df1.reset_index() # 1. 重置df1的索引,将原索引保存为'index'列          .merge(df2.set_index('id') # 2. 将df2的'id'列设为索引                    .div(df1['id'].value_counts(), axis=0), # 3. 计算df1中'id'的频率并用其除df2的数据列                 on='id', # 4. 根据'id'列进行左合并                 how='left')          .set_index('index').reindex(df1.index) # 5. 恢复原始df1的索引和顺序      )print("nOutput DataFrame:")print(out)

输出结果:

  id   Col1   Col2   Col30  A  100.0   25.0    5.01  B  200.0    NaN  800.02  A  100.0   25.0    5.03  C  300.0  400.0    NaN4  A  100.0   25.0    5.05  A  100.0   25.0    5.06  C  300.0  400.0    NaN

代码详解

让我们逐行分析上述解决方案:

df1.reset_index():

这一步是为了在合并操作中保留DF_1的原始行顺序。reset_index()会将当前的DataFrame索引转换为一个普通列(默认命名为’index’),并为DataFrame设置一个新的默认整数索引。这样做可以确保在后续合并后,我们能通过这个保存下来的’index’列重新恢复DF_1的原始顺序。

df2.set_index(‘id’):

将DF_2的’id’列设置为其索引。这样做是为了方便后续的除法操作。当Series(来自value_counts()的结果)与DataFrame进行除法运算时,Pandas会尝试根据索引进行对齐。

.div(df1[‘id’].value_counts(), axis=0):

df1[‘id’].value_counts(): 计算DF_1中每个’id’键出现的次数。例如,对于我们的示例数据,结果可能是 A: 4, B: 1, C: 2。这个结果是一个Series,其索引是’id’值。.div(…, axis=0): 对df2.set_index(‘id’)后的DataFrame进行除法操作。axis=0表示按行进行操作,Pandas会根据DataFrame的索引(此时是’id’)与value_counts()结果的索引进行匹配。这样,DF_2中每个’id’对应的所有数值列都会被其在DF_1中的出现频率所除。例如,对于’A’,Col1的400会被4除,Col2的100会被4除,以此类推。

.merge(…, on=’id’, how=’left’):

将处理后的DF_2(现在其值为已拆分的)与df1.reset_index()的结果进行合并。on=’id’: 指定合并的键是’id’列。how=’left’: 执行左合并。这意味着合并结果将包含df1.reset_index()中的所有行,并根据’id’匹配从处理后的DF_2中引入相应的拆分值。由于DF_1中的’id’是重复的,合并后会生成多行,每行对应DF_1中的一个原始记录。

.set_index(‘index’).reindex(df1.index):

.set_index(‘index’): 在合并结果中,将之前保存的原始索引列’index’重新设为DataFrame的索引。.reindex(df1.index): 这一步是确保最终DataFrame的行顺序与原始DF_1的行顺序完全一致。reindex()会根据df1.index(即原始DF_1的索引)重新排列行。

注意事项

数据类型转换: 由于进行了除法运算,结果DataFrame中的数值列的数据类型可能会从整数变为浮点数(float)。这在大多数情况下是期望的,但如果需要整数结果,可能需要进行额外的类型转换(例如,使用astype(int),但要处理NaN值)。缺失值 (NaN) 处理: 如果DF_2中的某些数值列本身就包含NaN,或者在除法操作后,某个键在DF_2中对应的列值为空,结果中也会保留NaN。例如,Col2在B行是NaN,Col3在C行是NaN,这些都会在最终输出中体现。键的完整性: 确保DF_1中的所有键都能在DF_2中找到匹配。如果DF_1中存在DF_2中没有的键,left merge会为这些键引入NaN值。反之,如果DF_2中存在DF_1中没有的键,这些键及其拆分后的值将不会出现在最终结果中。性能考量: 对于非常大的DataFrame,这种链式操作通常是高效的。Pandas底层使用优化的C语言实现,能够处理大量数据。然而,对于极大数据集,内存使用和计算时间仍需注意。

总结

通过巧妙地结合value_counts()、div()和merge()这三个核心Pandas函数,我们可以高效且精确地实现基于键匹配与计数的DataFrame值分配任务。这种方法不仅结构清晰,易于理解,而且在处理复杂的数据整合场景时表现出强大的灵活性和性能。掌握这些技巧,将极大地提升您在Pandas中进行数据清洗和转换的能力。

以上就是Pandas DataFrame中基于键匹配与计数的智能值分配教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1376899.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python游戏开发:动态调整下落精灵速度的教程
上一篇 2025年12月14日 16:18:28
Pydantic 字段别名进阶:处理复杂数据结构与现有键冲突
下一篇 2025年12月14日 16:18:45

相关推荐

  • 开放协作,共筑新章:openFuyao代码仓全面开源,多样化算力集群软件开源生态开启新篇

    开放协作,共筑新章:openFuyao代码仓全面开源,多样化算力集群软件开源生态开启新篇开放协作,共筑新章:openFuyao代码仓全面开源,多样化算力集群软件开源生态开启新篇开放协作,共筑新章:openFuyao代码仓全面开源,多样化算力集群软件开源生态开启新篇开放协作,共筑新章:openFuyao代码仓全面开源,多样化算力集群软件开源生态开启新篇

    [中国,上海,2025年9月18-20日]以“跃升行业智能化”为主题的“华为全联接大会2025”在上海隆重召开。大会上,openfuyao社区正式宣布其代码仓库全面开源,华为常务董事汪涛、华为鲲鹏计算业务总裁李义以及鲲鹏计算产品部部长刘林超分别在主题演讲中深入分享了社区在开源生态建设、技术演进成果及…

    2026年9月28日 • 用户投稿
    200
  • DLL攻击漫谈

    DLL攻击漫谈DLL攻击漫谈DLL攻击漫谈DLL攻击漫谈

    动态链接库(dll)可以作为执行任意代码的接口,并帮助恶意行为者实现其目标。dll是microsoft共享库的实现方式,通常以dll为文件扩展名,并且它们也是pe文件,与exe文件结构相同。 DLL可以包含PE文件支持的任何类型的内容,这些内容可能包括代码、资源或数据的任意组合。DLL的主要用途是在…

    2026年9月28日 • 用户投稿
    100
  • MySQL在大数据环境下的应用与优化项目经验总结

    MySQL在大数据环境下的应用与优化项目经验总结MySQL在大数据环境下的应用与优化项目经验总结MySQL在大数据环境下的应用与优化项目经验总结MySQL在大数据环境下的应用与优化项目经验总结

    MySQL在大数据环境下的应用与优化项目经验总结 随着大数据时代的到来,越来越多的企业和组织开始面临海量数据的存储、处理和分析的挑战。MySQL作为一种开源的关系型数据库管理系统,其在大数据环境下的应用和优化成为了许多项目的重要一环。本文将总结一些在使用MySQL处理大数据项目中的经验和优化方法。 …

    2026年9月28日 • 用户投稿
    100
  • 豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法

    豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法豆瓣APP怎么看小组里自己的帖子_小组内个人发帖查找方法

    通过个人主页动态可直接查看按时间倒序排列的小组发帖与回复;2. 在小组内使用搜索功能输入用户名或关键词筛选个人发帖;3. 借助爱豆搜等外部工具输入ID和关键词高效检索历史帖子。 如果您在豆瓣小组中发布了多个帖子,但无法快速找到自己之前的发言记录,可能是因为缺少直接的“我的帖子”聚合功能。以下是几种在…

    2026年9月28日 • 用户投稿
    000
  • 怎么删除微信公众号_微信公众号内容与账号删除教程

    怎么删除微信公众号_微信公众号内容与账号删除教程怎么删除微信公众号_微信公众号内容与账号删除教程怎么删除微信公众号_微信公众号内容与账号删除教程怎么删除微信公众号_微信公众号内容与账号删除教程

    删除微信公众号内容或账号需谨慎操作。删除文章后,用户通过原链接只能看到“内容已删除”提示,但链接仍存在;注销账号则需满足无违规、无资金未结清等条件,并经历15天冷静期,一旦完成,所有数据将永久清空,名称可能被释放,且无法恢复。批量删除文章需手动逐页操作,效率较低,建议提前分类管理。操作前应备份重要内…

    2026年9月28日 • 用户投稿
    100
  • 整理桌面图标win10方法

    整理桌面图标win10方法整理桌面图标win10方法整理桌面图标win10方法整理桌面图标win10方法

    想要让自己的windows 10桌面更加整洁美观,但又不知道如何下手?别担心,接下来就为大家详细介绍如何在win10系统中整理桌面图标,让你的桌面焕然一新! 如何让Win10桌面图标整齐排列: 首先,在桌面上单击鼠标右键,然后选择顶部菜单中的“查看”选项。 在弹出的菜单中,你可以看到诸如“自动排列图…

    2026年9月28日 • 用户投稿
    100
  • 巴别塔圣歌笔记本答案怎么获取 笔记本谜题详细解答

    巴别塔圣歌笔记本答案怎么获取 笔记本谜题详细解答巴别塔圣歌笔记本答案怎么获取 笔记本谜题详细解答巴别塔圣歌笔记本答案怎么获取 笔记本谜题详细解答巴别塔圣歌笔记本答案怎么获取 笔记本谜题详细解答

    游戏第一章的初始谜题涉及“开关门”的符号排列,需将开关符号置于左侧,门符号放在右侧。完成此步骤后,进入水阀控制系统,正确操作顺序为“上、上、下、上、下”,可成功关闭左侧的三个出水口。 第二章谜题复杂度上升,首先需解开“隐藏、孩童”与“寻找、孩童”两组关键词。随后面对“推倒、石柱、道路”的图示组合,以…

    2026年9月28日 • 用户投稿
    100
  • 运维新概念:高效积累之道

    运维新概念:高效积累之道运维新概念:高效积累之道运维新概念:高效积累之道运维新概念:高效积累之道

    当前技术更新日新月异,各类语言、工具和理念层出不穷,令人应接不暇。唯有持续学习、不断吸收新知,方能紧跟发展潮流,不被时代淘汰。 1、 IT部门面临诸多挑战 2、 目前,IT部门整体尚未获得充分认可。尽管信息化在各单位日益重要,仍有部分管理者将其视为单纯的成本支出部门,认为其只消耗资源而无法直接创收,…

    2026年9月28日 • 用户投稿
    100
  • 抖音价格保护是什么意思?抖音有价格保护吗

    抖音价格保护是什么意思?抖音有价格保护吗抖音价格保护是什么意思?抖音有价格保护吗抖音价格保护是什么意思?抖音有价格保护吗抖音价格保护是什么意思?抖音有价格保护吗

    随着短视频平台的迅猛发展,抖音早已不只是一个娱乐工具,更成为集内容与电商于一体的综合性平台。越来越多用户选择在抖音购物,但随之而来的问题也引发了关注:刚买完商品会不会马上降价?有没有价格保障机制?今天我们就来深入解析“抖音是否有价格保护”以及“价格保护到底意味着什么”。 一、什么是抖音的价格保护? …

    2026年9月28日 • 用户投稿
    000
  • 十一小长假肆意畅玩!华硕RTX5060甜品卡全力助能

    十一小长假肆意畅玩!华硕RTX5060甜品卡全力助能十一小长假肆意畅玩!华硕RTX5060甜品卡全力助能十一小长假肆意畅玩!华硕RTX5060甜品卡全力助能十一小长假肆意畅玩!华硕RTX5060甜品卡全力助能

    十一假期的脚步渐近,想想即将到来的悠闲小长假,小伙伴们准备怎样度过呢?宅家开启电竞狂欢才是明智之选!在这个假期,有诸多佳作等你来战,准备好投身一场热血沸腾的电竞之旅了吗~ 想要顺利畅享游戏大作带来的极致体验,DLSS技术的支持至关重要。DLSS是一套创新性的神经网络渲染技术,借助AI提升帧率、降低延…

    2026年9月28日 • 用户投稿
    400
  • 显卡散热风扇的轴承技术如何影响噪音与寿命?

    显卡风扇的噪音和寿命主要由轴承类型决定,含油轴承成本低但寿命短、易变吵;滚珠轴承寿命长、稳定性好,但可能有轻微机械噪音;流体动压轴承(FDB/HDB)静音效果最佳、寿命最长,是高端显卡首选。此外,风扇叶片设计、电机品质、散热结构、安装方式及线圈啸叫等也影响整体噪音。通过定期除尘、优化风道、自定义风扇…

    2026年9月27日
    100
  • ChatExcel自定义分析流程_ChatExcel个性化分析流程创建方法

    ChatExcel自定义分析流程_ChatExcel个性化分析流程创建方法ChatExcel自定义分析流程_ChatExcel个性化分析流程创建方法ChatExcel自定义分析流程_ChatExcel个性化分析流程创建方法ChatExcel自定义分析流程_ChatExcel个性化分析流程创建方法

    答案:通过定义目标、使用自然语言或脚本创建流程、设置自动化触发及调试管理,可在ChatExcel中实现个性化数据处理。具体包括明确分析范围与规则,拆解任务;用自然语言生成指令并优化;切换脚本模式编写逻辑;绑定时间或事件触发器自动执行;最后通过调试、日志和版本控制确保流程稳定运行。 如果您希望在Cha…

    2026年9月27日 • 用户投稿
    000
  • 详解抖音平台订单导出的具体步骤

    详解抖音平台订单导出的具体步骤详解抖音平台订单导出的具体步骤详解抖音平台订单导出的具体步骤详解抖音平台订单导出的具体步骤

    随着电商行业的不断壮大,抖音已逐渐成为众多电商从业者不可或缺的运营阵地。在日常经营中,订单导出是一项极为关键的操作,能够帮助商家高效整理交易数据,优化发货流程,并提升客户服务体验。本文将从多个方面深入介绍如何在抖音平台完成订单导出操作。 1. 登录抖音商家后台 首先需进入抖音商家后台系统。打开抖音A…

    2026年9月27日 • 用户投稿
    000
  • iPhone 18 Pro超前曝光:2nm心片加持 屏下Face ID无望

    iPhone 18 Pro超前曝光:2nm心片加持 屏下Face ID无望iPhone 18 Pro超前曝光:2nm心片加持 屏下Face ID无望iPhone 18 Pro超前曝光:2nm心片加持 屏下Face ID无望iPhone 18 Pro超前曝光:2nm心片加持 屏下Face ID无望

    虽然距离iphone 18 pro和iphone 18 pro max正式亮相还有一年时间,但关于这两款机型的传闻已陆续浮现。据cnmo整理外媒最新爆料消息,以下是一些备受关注的潜在升级亮点: iPhone 17 Pro系列 灵动岛或将缩小 有知名数码博主透露,iPhone 18标准版及Pro系列有…

    2026年9月27日 • 用户投稿
    000
  • mysql中explain用法

    mysql中explain用法mysql中explain用法mysql中explain用法mysql中explain用法

    MySQL中的EXPLAIN用法详解及代码示例 在MySQL中,EXPLAIN是一个非常有用的工具,用于分析查询语句的执行计划。通过使用EXPLAIN,我们可以了解到MySQL数据库是如何执行查询语句的,从而帮助我们优化查询性能。 EXPLAIN的基本语法如下: EXPLAIN SELECT 列名 …

    2026年9月27日 • 用户投稿
    300
  • Java Swing GUI:构建交互式逻辑门(AND门示例)

    Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)Java Swing GUI:构建交互式逻辑门(AND门示例)

    本文详细介绍了如何使用Java Swing构建一个简单的AND逻辑门GUI应用。通过结合JCheckBox作为输入和JLabel作为视觉输出,并利用ChangeListener监听组件状态变化,实现当两个复选框都被选中时显示“绿色”,否则显示“红色”的功能。教程涵盖了组件创建、事件监听以及将自定义面…

    2026年9月27日 • 用户投稿
    200
  • laravel怎么在 Eloquent 中使用 DB::raw() 执行原生表达式_laravel Eloquent DB::raw原生表达式使用方法

    laravel怎么在 Eloquent 中使用 DB::raw() 执行原生表达式_laravel Eloquent DB::raw原生表达式使用方法laravel怎么在 Eloquent 中使用 DB::raw() 执行原生表达式_laravel Eloquent DB::raw原生表达式使用方法laravel怎么在 Eloquent 中使用 DB::raw() 执行原生表达式_laravel Eloquent DB::raw原生表达式使用方法laravel怎么在 Eloquent 中使用 DB::raw() 执行原生表达式_laravel Eloquent DB::raw原生表达式使用方法

    在 Laravel Eloquent 中可使用 DB::raw() 实现复杂查询,1. 在 select 中添加计算字段如 COUNT;2. 用 whereRaw 配合参数绑定安全过滤数据;3. 通过 orderByRaw 按表达式排序;4. 使用 havingRaw 对聚合结果筛选;5. 注意避免…

    2026年9月27日 • 用户投稿
    1100
  • Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程

    Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程Word文档怎么插入可以打勾的方框_Word可勾选复选框插入与使用教程

    1、通过启用“开发工具”可插入可点击打勾的复选框控件;2、使用Wingdings 2字体插入静态方框与对勾符号实现手动标记;3、利用表格单元格模拟方框并输入对勾符号用于打印或数字勾选;4、结合ActiveX控件与VBA实现高级交互功能,需保存为.docm格式。 如果您需要在Word文档中创建可打勾的…

    2026年9月27日 • 用户投稿
    100
  • Real RGB OLED 屏手机将量产上市 猜猜是华为还是小米?

    Real RGB OLED 屏手机将量产上市 猜猜是华为还是小米?Real RGB OLED 屏手机将量产上市 猜猜是华为还是小米?Real RGB OLED 屏手机将量产上市 猜猜是华为还是小米?Real RGB OLED 屏手机将量产上市 猜猜是华为还是小米?

    供应链消息:real rgb oled屏幕即将量产,手机显示技术迎来革新! 手机屏幕显示效果有望迎来重大突破!据数码闲聊站爆料,Real RGB OLED屏幕将于今年正式量产。该屏幕采用完整RGB子像素排列,每个子像素独立发光,显著提升清晰度,并有效降低像素密度损失,在同分辨率下显示效果可与LCD屏…

    2026年9月27日 • 用户投稿
    000
  • safari浏览器“显示概览”功能怎么用_safari浏览器显示概览功能使用方法

    Safari浏览器中可通过触控手势、标签页按钮或键盘快捷键快速进入标签页概览模式,查看并管理所有打开的页面,支持切换、关闭及创建标签页组。 如果您在浏览网页时希望快速查看所有打开的标签页并进行管理,Safari浏览器中的“显示概览”功能可以帮助您实现这一操作。通过该功能,您可以直观地查看每个标签页的…

    2026年9月27日
    000

发表回复

登录后才能评论
关注微信