新闻中心
基于键值条件高效映射 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这种方法虽然能达到目的,但存在明显局限性:
N世界
一分钟搭建会展元宇宙
138
查看详情
- 重复性高: 对于每个需要映射的列,都需要重复编写 np.select 逻辑。
- 扩展性差: 当需要处理的列数很多时,代码会变得冗长且难以维护。
- 效率问题: 尽管 np.select 是矢量化的,但多次独立的列操作仍然不如一次性处理所有相关列高效。
为了解决这些问题,我们需要一种更高效、更具通用性的矢量化方法。
2. 基于布尔掩码的矢量化映射方法
Pandas 提供了强大的工具来构建和应用布尔掩码,实现对 DataFrame 的高效条件性修改。核心思想是创建一个与原始 DataFrame 形状相似的布尔矩阵,该矩阵的 True 值指示应保留原始数据,False 值指示应替换为默认值(如 'NA')。
2.1 核心思路
- 定义映射规则: 使用字典明确指定每个“键”值对应哪些目标列是有效的。
- 生成布尔掩码: 将映射规则转换为一个布尔 DataFrame,其中行代表“键”,列代表数据列,True 表示该键下该列有效。
- 对齐并应用掩码: 将生成的布尔掩码与原始 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网站优化
# 祖庙网站建设教程
# 楼盘推广营销方案
# 兴义seo网站优化
# 网站线下推广方案
# 武汉抖音营销推广排名
# 山东网站建设制作定制
# 网站建设员工职业
# 工具
# 数据处理
# 中文网
# 相关文章
# 是一个
# 如何使用
# 矢量化
# 键值
# 掩码
# 布尔
# 数据清洗
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Safari浏览器输入栏卡顿如何解决 Safari搜索建议与缓存清理
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
深入理解Go语言中Map值与方法接收器的交互:为什么需要临时变量
地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站
Golang如何通过reflect操作map_Golang reflect map操作与遍历技巧
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
12306选座怎么选到商务座_12306商务座选择与配置说明
QQ网页版官方账号入口 QQ网页版网页版登录指南
CSS条件样式无法按设备触发怎么排查_media条件语句正确设置解决触发问题
J*aScript实现动态背景色下的文本与按钮颜色自适应调整
PHP表单数据传递:如何通过隐藏输入字段获取动态ID
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
PostgreSQL海量数据高效导入策略:Python与Django实践指南
不同用户不同价格! 索尼开启账户个性化定价测试
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
漫蛙MANWA漫画主页官方入口 漫蛙漫画最新在线阅读地址
利用Bokeh CustomJS动态控制DataTable列可见性
2025俄罗斯Yandex最新入口 官方网站地址及浏览器下载指南
2025AO3夸克浏览器通道_AO3手机HTTPS安全入口分享
Odoo 16:在表单视图中基于当前记录动态修改Tree视图属性
如何在网页中实现特定地点的随机图片展示
Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性
如何在 Excel Online 和 Google 表格中更改日期格式
c++20的std::jthread是什么_c++可中断线程与RAII式管理
如何在J*a中使用Locale处理多语言环境
qq浏览器如何查看和导出已保存的密码 qq浏览器密码管理器数据备份教程
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
b站如何看历史记录_b站观看历史找回方法
C++如何实现线程池_C++11手动实现一个简单的固定大小线程池
聚水潭ERP登录页面入口 聚水潭ERP官网登录界面
《主播少女的秘密账号迷宫》首支宣传片
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
将JSON对象数组转置为键值对列表的实用指南
小米汽车11月交付量突破40000台!雷军:将继续努力
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
妖精动漫免费平台 妖精动漫官网资源观看网址
React Router v6 教程:构建认证保护的私有路由与重定向策略
c++中的const_cast和reinterpret_cast怎么用_c++四种类型转换
Win10怎么设置静态IP地址 Win10手动配置IP地址步骤【指南】
TypeScript/J*aScript:高效查找数组中首个唯一ID对象
Golang如何使用const iota_Go iota常量计数器讲解
163邮箱登录密码 163邮箱忘记密码找回
Golang如何实现简单的Web表单_Golang表单提交与验证处理方法
J*a中实现Go语言select通道多路复用机制
微信聊天记录怎么加密_微信聊天记录加密方法
铁路12306的积分有效期是多久_铁路12306积分有效期说明
css卡片内容溢出如何处理_使用overflow隐藏或scroll显示内容
Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践


2025-11-29
浏览次数:次
返回列表