基于键值条件高效映射 Pandas DataFrame 多列数据


基于键值条件高效映射 Pandas DataFrame 多列数据

本文介绍如何利用 pandas 和 numpy 高效地根据 dataframe 中“键”列的值,有条件地映射和处理多列数据。针对传统 `numpy.select` 逐列操作的低效性,教程将展示如何通过构建布尔掩码结合 `dataframe.where()` 方法实现矢量化操作,从而优化数据清洗和转换流程,将不符合条件的列值替换为指定标记(如 'na')。

1. 问题背景与传统方法局限性

在数据处理中,我们经常需要根据某一“键”列的值,有条件地修改或保留 DataFrame 中其他多列的数据。例如,当“键”列为 'key1' 时,我们可能只关心 'colA' 和 'colD' 的值,而其他列则应标记为无效。

以下是一个典型的场景及使用 numpy.select 的传统实现方式:

import pandas as pd
import numpy as np

# 创建示例 DataFrame
data = {
    'key': ['key1', 'key2', 'key3', 'key1', 'key2'],
    'colA': ['value1A', 'value2A', 'value3A', 'value4A', 'value5A'],
    'colB': ['value1B', 'value2B', 'value3B', 'value4B', 'value5B'],
    'colC': ['value1C', 'value2C', 'value3C', 'value4C', 'value5C'],
    'colD': ['value1D', 'value2D', 'value3D', 'value4D', 'value5D']
}
df = pd.DataFrame(data)

# 传统方法:为每列单独应用 np.select
df['colA'] = np.select([df['key'] == 'key1'], [df['colA']], default= 'NA')
df['colD'] = np.select([df['key'] == 'key1'], [df['colD']], default= 'NA')
df['colB'] = np.select([df['key'] == 'key2'], [df['colB']], default= 'NA')
df['colC'] = np.select([df['key'] == 'key3'], [df['colC']], default= 'NA')

print("使用 np.select 的结果:")
print(df)

输出结果:

使用 np.select 的结果:
    key     colA     colB     colC     colD
0  key1  value1A       NA       NA  value1D
1  key2       NA  value2B       NA       NA
2  key3       NA       NA  value3C       NA
3  key1  value4A       NA       NA  value4D
4  key2       NA  value5B       NA       NA

这种方法虽然能达到目的,但存在明显局限性:

蚂蚁PPT 蚂蚁PPT

AI在线智能生成PPT

蚂蚁PPT 113 查看详情 蚂蚁PPT
  • 重复性高: 对于每个需要映射的列,都需要重复编写 np.select 逻辑。
  • 扩展性差: 当需要处理的列数很多时,代码会变得冗长且难以维护。
  • 效率问题: 尽管 np.select 是矢量化的,但多次独立的列操作仍然不如一次性处理所有相关列高效。

为了解决这些问题,我们需要一种更高效、更具通用性的矢量化方法。

2. 基于布尔掩码的矢量化映射方法

Pandas 提供了强大的工具来构建和应用布尔掩码,实现对 DataFrame 的高效条件性修改。核心思想是创建一个与原始 DataFrame 形状相似的布尔矩阵,该矩阵的 True 值指示应保留原始数据,False 值指示应替换为默认值(如 'NA')。

2.1 核心思路

  1. 定义映射规则: 使用字典明确指定每个“键”值对应哪些目标列是有效的。
  2. 生成布尔掩码: 将映射规则转换为一个布尔 DataFrame,其中行代表“键”,列代表数据列,True 表示该键下该列有效。
  3. 对齐并应用掩码: 将生成的布尔掩码与原始 DataFrame 的“键”列对齐,然后使用 DataFrame.where() 方法一次性应用到所有目标列。

2.2 实现步骤与代码示例

首先,定义我们的映射规则,即哪个 key 对应哪些列是有效的:

import pandas as pd
import numpy as np

# 重新创建原始 DataFrame
data = {
    'key': ['key1', 'key2', 'key3', 'key1', 'key2'],
    'colA': ['value1A', 'value2A', 'value3A', 'value4A', 'value5A'],
    'colB': ['value1B', 'value2B', 'value3B', 'value4B', 'value5B'],
    'colC': ['value1C', 'value2C', 'value3C', 'value4C', 'value5C'],
    'colD': ['value1D', 'value2D', 'value3D', 'value4D', 'value5D']
}
df = pd.DataFrame(data)

# 1. 定义键与目标列的映射关系
# 例如:'key1' 对应 'colA' 和 'colD'

以上就是基于键值条件高效映射 Pandas DataFrame 多列数据的详细内容,更多请关注其它相关文章!


# 解决问题  # 视频的营销推广  # 哈尔滨网站维护优化  # 如何上商城链接网站推广  # 越秀知识营销推广  # 宜昌外贸网站建站推广企业  # 石家庄高级网站建设报价  # 网站影响推广吗  # 电子商务网站推广含义  # seo的优化营销  # 怎样优化新网站引流推广  # 工具  # 数据处理  # 中文网  # 相关文章  # 是一个  # 矢量化  # 键值  # 多维  # 掩码  # 布尔  # 数据清洗 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 盲鳗善于分泌黏液猜猜主要用来做什么  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  厨房地面防滑垫的油污怎么洗? 机洗和手洗防滑垫的注意事项  抖音视频如何添加标题?添加标题有哪些好处?  《360浏览器》自动保存账号密码设置方法  139邮箱登录入口官网 139邮箱登录入口官网网址  学习通网页版课程打不开_课程无法访问时的解决方法  iPhone 13 Pro Max如何设置桌面小组件_iPhone 13 Pro Max小组件添加指南  掌握Go App Engine项目结构与GOPATH:包管理与导入实践  mysql中外键约束如何使用_mysql FOREIGN KEY操作  漫蛙官网(首页入口)_漫蛙漫画稳定访问教程分享  谷歌学术论文搜索引擎 谷歌学术官网入口论坛永久链接  《暗黑破坏神4》国服回归送狂欢礼包 价值6916元  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  《下一站江湖2》独孤剑诀习得方法  苹果17 Pro如何启用分屏浏览_iPhone 17 Pro分屏浏览设置步骤  PPT页面尺寸怎么修改 PPT自定义幻灯片大小与方向设置【教程】  《优志愿》修改手机号方法  电脑从睡眠中被自动唤醒怎么办_Windows唤醒源事件查看与禁用【解决】  《星露谷物语》克林特好感度事件介绍  《新三国志曹操传》游历事件袁尚突围攻略  MySQL多重JOIN技巧:高效关联同一表获取多角色信息  手机自动关机是怎么回事?如何修复?手机异常关机的原因排查与修复技巧  抖音怎么解除第三方绑定_抖音解除第三方平台绑定方法介绍  解决CSS容器溢出问题:使用calc()实现精确布局与边距控制  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  Sublime怎么自动添加CSS前缀_Sublime安装Autoprefixer插件  《我的恋爱逃生攻略》中文名字输入方法  《波斯王子:失落的王冠》剑术大师打法攻略  《深林》冬季章节图文攻略  J*aScript与HTML元素交互:图片点击事件与链接处理教程  word表格如何按某一列内容进行排序_Word表格按列排序方法  小红书网页版怎么进 小红书网页版通用入口  三星A55应用闪退排查步骤_Samsung A55稳定性优化技巧  Win11怎么录屏_Windows 11自带Xbox Game Bar录制视频  Flexbox布局:实现粘性导航与底部页脚的完美结合  diskgenius分区工具如何设置Bios启动项  composer licenses 命令:如何检查项目依赖的许可证?  《合金装备4》有望推出重制版!制作人发话了  苹果iPhone14ProMax如何新建AppleID_iPhone14ProMax新建AppleID具体流程  c++20的指定初始化(Designated Initializers)怎么用_c++ C风格结构体初始化  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  uc浏览器官网网页版使用 uc浏览器官网免费在线首页  Python自动化抓取GBGB赛狗比赛结果:日期范围与赛道筛选教程  mysql离线安装后如何启动_mysql离线安装完成后启动服务的方法  抖音号怎么解除企业认证改成个人?改成个人有影响吗?  Excel如何快速找到并断开外部数据源链接_Excel外部数据源断开方法  包子漫画在线观看入口 包子漫画网正版全集链接  PHP中实现JSON数据数组分页的教程 

 2025-11-29

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.