pandas or sql计算前后两行数据间的增值方法


Posted in Python onApril 20, 2018

遇到这样一个需求,有一张表,要给这张表新增一个字段delta,delta的值等于每行的c1列的值减去上一行c1列的值。

我的解决方案,可以通过python的pandas的diff来实现,也可以通过sql来实现,如下

import pandas as pd

srcTable = pd.read_csv('pos1.csv')
print(srcTable)
destTable = srcTable.loc[srcTable.tid == 1, ['ts1', 'ts2']].sort_values(by='ts1')
destTable.columns = ['deltaTs1', 'deltaTs2']
destTable = destTable.diff()
destTable = destTable.fillna(0)
destTable['delay'] = destTable['deltaTs2'] - destTable['deltaTs1']
print(destTable)

出来的效果如下:

tid   ts1   ts2
0 1 1500443161000 1500443161240
1 1 1500443162000 1500443162994
2 1 1500443163000 1500443163067
3 1 1500443164000 1500443164993
 deltaTs1 deltaTs2 delay
0  0.0  0.0 0.0
1 1000.0 1754.0 754.0
2 1000.0  73.0 -927.0
3 1000.0 1926.0 926.0

若是用sql语句,我用的是mysql,自己构造行号rn

mysql> select main.t_id,
main.ts1,
ifnull(main.ts1-sub.ts1,0) deltaTs1,
main.ts2,
ifnull(main.ts2-sub.ts2,0) deltaTs2 from
(SELECT t_id,ts1,ts2,(@r1 :=@r1 + 1) rn FROM pos1,(SELECT @r1 := 0) r where t_id=1 ORDER BY ts1) main
left join 
(SELECT t_id,ts1,ts2,(@r2 :=@r2 + 1) rn FROM pos1,(SELECT @r2 := 0) r where t_id=1 ORDER BY ts1) sub 
on main.rn-1=sub.rn;
+------+---------------+----------+---------------+----------+
| t_id | ts1   | deltaTs1 | ts2   | deltaTs2 |
+------+---------------+----------+---------------+----------+
| 1 | 1500443161000 |  0 | 1500443161240 |  0 |
| 1 | 1500443162000 |  1000 | 1500443162994 |  1754 |
| 1 | 1500443163000 |  1000 | 1500443163067 |  73 |
| 1 | 1500443164000 |  1000 | 1500443164993 |  1926 |
+------+---------------+----------+---------------+----------+

测试数据如下

pos1.csv

1,1500443161000,1500443161240
1,1500443162000,1500443162994
1,1500443163000,1500443163067
1,1500443164000,1500443164993
CREATE TABLE `pos1` (
 `t_id` int(11) DEFAULT NULL,
 `ts1` bigint(22) DEFAULT NULL,
 `ts2` bigint(22) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO pos1 VALUES (1, 1500443161000, 1500443161240);
INSERT INTO pos1 VALUES (1, 1500443162000, 1500443162994);
INSERT INTO pos1 VALUES (1, 1500443163000, 1500443163067);
INSERT INTO pos1 VALUES (1, 1500443164000, 1500443164993);

貌似有些数据库有这种当前行减去上一行数据的函数,具体我没有研究过。有知道的朋友可以告诉我一下,我印象中像Sqlserver好像有。

Python 相关文章推荐
python使用mysqldb连接数据库操作方法示例详解
Dec 03 Python
使用Python的Twisted框架实现一个简单的服务器
Apr 16 Python
使用Python操作MySQL的一些基本方法
Aug 16 Python
Python数据类型详解(四)字典:dict
May 12 Python
新手如何快速入门Python(菜鸟必看篇)
Jun 10 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python实现二叉搜索树BST的方法示例
Jul 30 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
使用opencv中匹配点对的坐标提取方式
Jun 04 Python
python自动化调用百度api解决验证码
Apr 13 Python
对pandas进行数据预处理的实例讲解
Apr 20 #Python
pandas 两列时间相减换算为秒的方法
Apr 20 #Python
详谈pandas中agg函数和apply函数的区别
Apr 20 #Python
Python使用pip安装pySerial串口通讯模块
Apr 20 #Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 #Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 #Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 #Python
You might like
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP生成图片验证码、点击切换实例
2014/06/25 PHP
php中str_pad()函数用法分析
2017/03/28 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
javascript之解决IE下不渲染的bug
2007/06/29 Javascript
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
JavaScript 入门基础知识 想学习js的朋友可以参考下
2009/12/26 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
利用JQuery实现datatables插件的增加和删除行功能
2017/01/06 Javascript
jQuery基于ajax方式实现用户名存在性检查功能示例
2017/02/10 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
vue+Element-ui实现分页效果
2020/11/15 Javascript
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
3个用于数据科学的顶级Python库
2018/09/29 Python
python如何实现一个刷网页小程序
2018/11/27 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
保护动物的标语
2014/06/11 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
能让Python提速超40倍的神器Cython详解
2021/06/24 Python
JAVA API 实用类 String详解
2021/10/05 Java/Android
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers
element tree树形组件回显数据问题解决
2022/08/14 Javascript