【Python】pandas的向量化操作

news/2025/10/12 23:36:15/文章来源:https://www.cnblogs.com/shan-gui-yao/p/19137501
dict_nb={[1,2,3]:[4,5]}#多层循环效率不高
for i in range(0, df2.shape[0]): #循环,如果df2的列表中,每行第1列等于GOOD,且第4列等于字典键的第二个值(此处为2),第5列等于字典键的第三个值(此处为3)if df2.values[i][1] == "GOOD" and df2.values[i][4] == list(dict_nb.keys())[0][1] and df2.values[i][5] ==list(dict_nb.keys())[0][2]:print(dict_nb[("GOOD", df2.values[i][4], df2.values[i][5])]) #打印该字典的值## 使用pandas的向量化操作更高效
first_key = list(dict_nb.keys())[0] #字典的键列表化
filtered_df = df2[(df2.iloc[:, 1] == "GOOD") &  (df2.iloc[:, 4] == first_key[1]) & (df2.iloc[:, 5] == first_key[2])]for index, row in filtered_df.iterrows():key = ("GOOD", row[4], row[5])print(dict_nb[key])

################# 加入循环 #######################
# 使用pandas提高效率
for key, dict_value in dict_nb.items():code, val1, val2 = key# 使用pandas的布尔索引mask = ((df2.iloc[:, 1] == code) &   #选择df2的第2,5,6列的所有行,创建一个布尔序列,表示第2,5,6列的值是否等于 code,val1,val2,如果mask为True表示满足所有条件(df2.iloc[:, 4] == val1) & (df2.iloc[:, 5] == val2))matching_rows = df2[mask]   #使用布尔索引,只返回 mask 为 True 的行if not matching_rows.empty:  #检查筛选结果是否为空,如果不为空,则打印字典值
        print(f"字典值: {dict_value}")

向量化操作是指使用 Pandas/NumPy 的内置函数对整个数据集进行操作,而不是使用 Python 循环。这些操作在底层使用编译语言(如 C 或 Fortran)实现,比 Python 循环快几个数量级。

常见的向量化操作

1. 算术运算
python
# 基本算术运算
df['add'] = df['A'] + df['B']        # 加法
df['subtract'] = df['A'] - df['B']   # 减法
df['multiply'] = df['A'] * df['B']   # 乘法
df['divide'] = df['A'] / df['B']     # 除法
df['power'] = df['A'] ** 2           # 幂运算# 使用 numpy 函数
df['sqrt'] = np.sqrt(df['A'])        # 平方根
df['log'] = np.log(df['A'])          # 对数
2. 比较运算
python
# 比较操作
df['greater'] = df['A'] > df['B']           # 大于
df['equal'] = df['A'] == df['B']            # 等于
df['between'] = (df['A'] >= 10) & (df['A'] <= 50)  # 介于# 多条件组合
condition = (df['A'] > 50) | (df['B'] < 20)  # 或条件
df['complex_condition'] = condition
3. 字符串操作
python
# 创建字符串数据
df_str = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],'email': ['alice@email.com', 'bob@test.com', 'charlie@mail.org', 'david@example.com']
})# 字符串向量化操作
df_str['name_upper'] = df_str['name'].str.upper()           # 大写
df_str['name_length'] = df_str['name'].str.len()            # 长度
df_str['domain'] = df_str['email'].str.split('@').str[1]    # 提取域名
df_str['contains_test'] = df_str['email'].str.contains('test')  # 包含检测
4. 日期时间操作
python
# 创建日期数据
df_date = pd.DataFrame({'date': pd.date_range('2023-01-01', periods=5),'value': [10, 20, 30, 40, 50]
})# 日期向量化操作
df_date['year'] = df_date['date'].dt.year           # 提取年份
df_date['month'] = df_date['date'].dt.month         # 提取月份
df_date['day_name'] = df_date['date'].dt.day_name() # 星期几
df_date['next_week'] = df_date['date'] + pd.Timedelta(days=7)  # 日期加减
5. 条件逻辑操作
python
# 使用 np.where
df['category'] = np.where(df['A'] > 50, 'High', 'Low')# 使用 np.select 处理多个条件
conditions = [df['A'] < 20,(df['A'] >= 20) & (df['A'] < 50),df['A'] >= 50
]
choices = ['Low', 'Medium', 'High']
df['level'] = np.select(conditions, choices, default='Unknown')
6. 分组聚合操作
python
# 分组向量化操作
df_grouped = df.groupby('category').agg({'A': ['mean', 'std', 'min', 'max'],'B': 'sum'
})# 分组后应用函数
df['group_mean'] = df.groupby('category')['A'].transform('mean')

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker部署doris

拉取镜像 docker pull apache/doris:fe-3.0.4 docker pull apache/doris:be-3.0.4docker-compose.yamlversion: "3" services: fe: image: apache/doris:fe-3.0.4 hostname: fe environment: - FE_SERVERS=f…

ES客户端8版本与ES服务端7版本的兼容问题

🎬 第一阶段:发现问题(认识症状) 🔴 看到的错误日志: 2025-09-30 14:23:45.123 ERROR - ES全量同步任务执行失败 co.elastic.clients.transport.TransportException: Missing [X-Elastic-Product] header. P…

AI 改变数据库产品实践探索

AI 改变数据库产品实践探索OceanBase 结合 AI 技术,通过 Agent 和任务调度简化数据库操作,支持多数据库管理与易用性提升。01 obloader agent 导数工具使用中的难题 在实际使用导数工具进行数据导入的过程中,用户普…

使用Sender和io_uring改造Webserver

前言 我以前有写过一个练手玩具,参考 tinywebserver 当然那时候我稍微改了下,改成了主从 Reactor 和 epoll 不过那时候感觉最后实现的有线程问题,查了半天没查出来红温了,索性加了一把大锁 最近读了下 Sender 模型…

乐理 -04 打拍子

.. 四N拍子 打拍子.....附点小切分 强的在中间大附点&大切分八N拍子 打拍子 3个

如何在Renpy尝试中调整人物和背景图像大小

在初步绘制好立绘或者是背景后,如果直接存入images文件中进行图像调用,往往会出现图像过于大或者是过于小,导致当前场景观感不佳等问题。 解决方案主要有两种: (1)重新选择较大或者是较小的画布,重新绘制立绘,…

开源软件站

1. OSCHINA - 中文开源技术交流社区 https://www.oschina.net/2. 开源软件 - Gitee.com3. Trending repositories on GitHub today GitHub4. Explore projects GitLab5. GitCode - 全球开发者的开源社区,开源代码托…

如何安装claude code以及ccr code

如何安装claude code以及ccr code 1. 安装 node 1.1 node的常规安装(适用于linux18.04,linux20.04等新版本) 参考官网安装顺序:https://nodejs.org/en/download 1.2 常规安装失败,其他情况下node的安装(适用于li…

代码托管平台

1. 开源软件 - Gitee.com2. Trending repositories on GitHub today GitHub3. Explore projects GitLab4. GitCode - 全球开发者的开源社区,开源代码托管平台5. 腾讯Coding 2025年10月12日停止注册,推荐CNB - Cloud…

209. 长度最小的子数组 滑动窗口+暴力

209. 长度最小的子数组 滑动窗口 思路 初始化滑动窗口的起始位置 left = 0、终止位置 right = 0。 外循环先确定滑动窗口的终止位置(增大滑动窗口),找到符合条件的子序列, 根据当前子序列元素和大小的情况,在内循…

CISA事件响应实战经验:漏洞修复与应急响应关键教训

美国网络安全和基础设施安全局分享了一起联邦机构遭攻击事件的技术分析,详细介绍了攻击者利用GeoServer漏洞的入侵过程、横向移动技术,并总结了漏洞修复、应急响应计划和日志监控三个关键教训。执行摘要 CISA在美国联…

机器人视觉系统在复杂环境中的自主决策与学习

本文介绍了某中心研发的Robin机器人视觉系统,该系统通过机器学习技术实现复杂场景下的物体识别与抓取决策,具备持续学习能力,能够从错误中自动学习并提升分拣准确率,展示了机器人感知系统在生产环境中的实际应用。…

2025开关按钮厂家最新权威推荐榜:品质卓越与创新设计的行业

2025开关按钮厂家最新权威推荐榜:品质卓越与创新设计的行业随着工业自动化和智能化的发展,开关按钮作为关键的控制元件,在各个行业中扮演着越来越重要的角色。为了帮助筛选开关按钮品牌,特此发布权威推荐榜单,为采…

正睿25noip十连测day5

题面:今天有点 fvv,只是 \(110pts,rk124\)。 T1 这道题是签到题,显然不用说。 T2 这道题比较难想。 我们先考虑这个给的数据范围啥意思。 \(2e5\) 大概率是 \(\mathcal{O}(n)\) 或 \(\mathcal{O}(n\log n)\)。 然后…

记录一下 WPF进程 SendMessage 发送窗口消息进行进程间通信,存在进程权限无法接受消息的问题

前言 最近在接手一个前同事写的WPF项目,是使用.NetFramwork 开发的,使用的进程间通信没有使用我们之前封装的基于WebSocket的封装组件的,而是使用Win32的方式:发送端用的Windows Api:SendMessage ,接受端使用的是…

kettle插件-dm数据库插件,解决kettle9.X版本无法连接数据库资源库问题

场景: 上周四一位小伙伴发出求助,周末有时间一起看下如何解决此问题,信息如下: 用 pdi(kettle)9.2 和 9.4 连接达梦资源库,达梦数据库信息和资源库登录的账密信息一模一样 但是 9.2 可以登录,9.4 一直就是登…

QT6中QGraphicsView特性与应用

QT6中QGraphicsView特性与应用2025-10-12 22:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

2025年10月武汉防水公司TOP5权威推荐榜:专业施工与优质服务的行业

随着建筑行业的快速发展,防水工程在各类建筑项目中的重要性日益凸显。优质的防水工程不仅能有效延长建筑物的使用寿命,还能显著提升居住和使用的舒适度。为了帮助筛选防水公司品牌,特此发布权威推荐榜单,为采购决策…