特征计算 - 遍历求值提速 6 万倍 lambda...if...else(if...else...) +map() 对比 iterrows() - Python代码

Python 进行 DataFrame 数据处理的过程中,需要判断某一列中的值(条件),然后对其他两列或三列进行求和(均值/最值)等运算,并把运算结果存储在新的一列中。干说可能觉得比较晕,我们来看一个例子:

下表 data_base 中,预测区间这一列共有 1/2/3/4 类值,现需要生成新列预测概率,新列的计算规则为:

  • 预测区间=1,则求分类概率_1分类概率_2的均值;
  • 预测区间=2/3,则求分类概率_1分类概率_2分类概率_3的均值;
  • 预测区间=4,则为分类概率_1的值;

 需求应该说清楚了,下面我们来看看根据上述计算规则,传统的代码怎么写。

传统代码思路:

iterrows() 遍历 data_base 表,使用 for ... if ... elif ...计算预测概率的值,

import time
start_1 =time.clock()#记录代码开始运行时间data_base[u'预测概率_1'] = 0#赋初始值for index,row in data_base.iterrows():if (row['预测区间'] == 1):data_base.loc[index, '预测概率_1'] = ((data_base.loc[index, '分类概率_1'] + data_base.loc[index, '分类概率_2'])/2).astype(float)elif (row['预测区间'] == 2) | (row['预测区间'] == 3):data_base.loc[index, '预测概率_1'] = ((data_base.loc[index, '分类概率_1'] + data_base.loc[index, '分类概率_2']+data_base.loc[index, '分类概率_3'])/3).astype(float)elif (row['预测区间'] == 4):data_base.loc[index, '预测概率_1'] = ((data_base.loc[index, '分类概率_1'])).astype(float)end_1 = time.clock()#记录代码结束运行时间
print('Running time: %s Seconds'%(end_1-start_1))#输出耗时

输出:Running time: 539.8234579883166 Seconds

 一万四千行数据,运行了将近十分钟...........


下面来看看比他快 6 万倍的代码(思路:lambda...if...else(if...else...) 定义计算规则,然后使用 map() 函数做映射):

start_2 =time.clock()a = data_base[u'预测区间'].tolist()
x = data_base[u'分类概率_1'].tolist()
y = data_base[u'分类概率_2'].tolist()
z = data_base[u'分类概率_3'].tolist()b = list(map(lambda a, x, y, z: (x+y+z)/3 if (a==2)|(a==3) else ((x+y)/2 if a==1 else(x if a==4 else 0)),a, x, y, z))
b = pd.DataFrame(b, columns=['预测概率_2'])#转化成dataframe格式
data_base = pd.concat([data_base, b['预测概率_2']], axis = 1, join='outer', sort=False)end_2 = time.clock()
print('Running time: %s Seconds'%(end_2-start_2))

输出:Running time: 0.009003164524415297 Seconds

539.823 / 0.009 ~~ 60000 (这可不就是快了 6 万倍嘛!哈哈......)


下面我们看看求的结果是否一样,不管代码快了多少,如果算错了那就没有任何意义:

data_base_out = data_base[['级别', '行业', '年份', '预测区间','分类概率_1', '分类概率_2', '分类概率_3','预测概率_1','预测概率_2']]
data_base_out.head()

对比后两列,一致!?

抽查一些值,根据计算规则手动算一算 ,对比表中代码给出的值,一致!?

完美~~~


 

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

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

相关文章

非线性回归 - 案例按步骤详解 -(SPSS建模)

在上一篇时间序列的文章中,偶然发现另一份数据的整体趋势很符合非线性回归关系,那么就顺势写一篇非线性回归案例的文章吧。 准备工作:SPSS - 中文版 SPSS 22.0 软件下载与安装教程 - 【附产品授权许可码,永久免费】 数据解释&am…

邮件服务器之POP3协议分析

第1章. POP3概述 POP3全称为Post Office Protocol version3,即邮局协议第3版。它被用户代理用来邮件服务器取得邮件。POP3采用的也是C/S通信 模型,对应的RFC文 档为RFC1939。 该协议非常简单,所以我们只重点介绍其通信过程,而相关…

Python 画图常用颜色 - 单色、渐变色、混色 - 够用

单色 装了seaborn扩展的话,在字典seaborn.xkcd_rgb中包含所有的xkcd crowdsourced color names。如下: plt.plot([1,2], lw4, cseaborn.xkcd_rgb[baby poop green]) 虽然觉得上面的已经够用了,但是还是备份一下这个最全的吧。 渐变色&…

[scikit-learn 机器学习] 2. 简单线性回归

文章目录1. 简单线性回归2. 评价模型本文为 scikit-learn机器学习(第2版)学习笔记1. 简单线性回归 import numpy as np import matplotlib.pyplot as pltX np.array([[6],[8],[10],[14],[18]]) y np.array([7,9,13,17.5,18]) plt.title("pizza …

Matplotlib - 散点图 scatter() 所有用法详解

目录 基本用法 散点的大小不同(根据点对应的数值) 散点的颜色不同(指定颜色或者渐变色) 散点图和折线图是数据分析中最常用的两种图形,他们能够分析不同数值型特征间的关系。其中,散点图主要用于分析特征…

Matplotlib - 折线图 plot() 所有用法详解

散点图和折线图是数据分析中最常用的两种图形。其中,折线图用于分析自变量和因变量之间的趋势关系,最适合用于显示随着时间而变化的连续数据,同时还可以看出数量的差异,增长情况。 Matplotlib 中绘制散点图的函数为 plot() &…

html 拍照旋转了90度_华为Mate X2概念图:可旋转正反三屏幕,单颗镜头在转轴上...

如果你是新朋友,请点击上方的蓝色字 关注 “高科技爱好者”,保证不会让你失望的.华为折叠手机的上市发售,引起了消费者的广泛关注,尤其是华为MateX系列手机的售价非常昂贵,同时出货量也比较少,所以外界都十…

[scikit-learn 机器学习] 3. K-近邻算法分类和回归

文章目录1. KNN模型2. KNN分类3. 使用sklearn KNN分类4. KNN回归本文为 scikit-learn机器学习(第2版)学习笔记K 近邻法(K-Nearest Neighbor, K-NN) 常用于 搜索和推荐系统。 1. KNN模型 确定距离度量方法(如欧氏距离…

Matplotlib - 柱状图、直方图、条形图 bar() barh() 所有用法详解

目录 基本用法 多个直方图并列显示 显示直方图上的数值 多个直方图堆叠显示 水平直方图 相较散点图和折线图,柱状图(直方图、条形图)、饼图、箱线图是另外 3 种数据分析常用的图形,主要用于分析数据内部的分布状态或分散状…

word里双横线怎么打_美人计 | 精致打工人秀智,教你内双怎么化

通勤妆千千万,大家画好才能算。国民初恋裴秀智搭档“南朋友”南柱赫,《启动了》这部剧让很多颜值控都纷纷沦陷了。起初奔着这两大主角看的,结果看着看着又被男二金宣虎圈了粉,在剧中裴秀智和金宣虎两小无猜的感情没能发展成爱情&a…

Matplotlib - 饼图、环形图 pie() 多重饼图 subplots() 所有用法详解

目录 基本用法 饼图中突出显示某部分 环形图(空心饼图) 多重饼图,并添加分割线 相较散点图和折线图,柱状图、饼图、箱线图是另外 3 种数据分析常用的图形,主要用于分析数据内部的分布状态或分散状态。饼图主要用于…

USACO2.11 The Castle hdu1198

题意: 我们憨厚的USACO主人公农夫约翰(Farmer John)以无法想象的运气,在他生日那天收到了一份特别的礼物:一张“幸运爱尔兰”(一种彩票)。结果这张彩票让他获得了这次比赛唯一的奖品——坐落于爱尔兰郊外的一座梦幻般的城堡&#…

Matplotlib - 箱线图、箱型图 boxplot () 所有用法详解

目录 基本用法 水平箱线图,显示均值 改变箱线图的形状(箱体的形状notch、异常值的形状sym) 改变箱线图的颜色(箱体边框的颜色、箱体填充色) 相较散点图和折线图,柱状图、饼图、箱线图(箱…

【转载】三极管,场效应管 工作原理小结

三极管属于流控器件,即Ib控制放大Ic, 场效应管属于压控器件,即Ugs控制Id。 二者都有三个工作区域,即截止区,恒流区和可变电阻区。 Ib小于开启电流时,Ic不受控,Rce很大,Ic很小&#x…

educoderpython答案顺序结构程序设计_答案汇总:土木机械类+计算机类

土木机械类(点击图片查看答案)理论力学1哈工大第7版机械设计濮良贵第9版机械原理西工大第8版材料力学1刘鸿文第5版结构力学1龙驭球第4版结构力学朱慈勉第2版工程力学范钦珊第2版材料力学2孙训方第5版理论力学教程水小平机械工程控制基础杨叔子第6版自动控制原理胡寿松第6版土力…

Pyecharts - 动态地图 geo()/ map() - 安装与用法详解

目录 安装Pyecharts 安装对应的地图拓展: 准备数据 使用 pyecharts 模块中的 Geo 函数: 使用 pyecharts 模块中的 map 函数: 把一些地域性比较明显的数据显示在一张地图上,远比给别人一个 Excel 文件好得多。 Matplotlib 中…

[编程启蒙游戏] 1. 猜数字

文章目录1. 游戏前提2. 游戏目的3. python代码4. 玩一玩1. 游戏前提 儿童能认识数字能比较数字大小 2. 游戏目的 培养孩子的二分查找思维 3. python代码 # python 3.7 环境 while True:n int(input("请输入一个数来猜:\n"))count 1print((\n*15))g…

生命银行怎么样_银行双职工家庭现状实录

和大多数银行女一样,我和老公也是同在银行上班相识,14年结婚,15年9月,大儿子出生,然后婆婆跟妈妈轮流照顾小孩,18年1月,小儿子出生,从此便开始了歇斯里底,腥风血雨的生活…

特征计算 - Jaccard 相似系数与 Python 代码实现

Jaccard 相似系数又称为Jaccard相似性度量(Jaccard系数,Jaccard 指数,Jaccard index)。用于比较有限样本集之间的相似性与差异性。Jaccard系数值越大,样本相似度越高。定义为相交的大小除以样本集合的大小:…

天气预报Dom解析(转)

view plain<span style"font-family:Arial, Verdana, sans-serif;color:#000000;"><span style"white-space: normal;"><span style"color:#000099;"> </span></span></span> DOM是用与平台无关和语言无关…