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用ConfigObj读写配置文件的实现代码
Mar 04 Python
python模拟登陆Tom邮箱示例分享
Jan 13 Python
分析python服务器拒绝服务攻击代码
Jan 16 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
Python的高阶函数用法实例分析
Apr 11 Python
在python中实现调用可执行文件.exe的3种方法
Jul 07 Python
pywinauto自动化操作记事本
Aug 26 Python
Kears+Opencv实现简单人脸识别
Aug 28 Python
Python网络爬虫信息提取mooc代码实例
Mar 06 Python
PyQt5 控件字体样式等设置的实现
May 13 Python
详解python datetime模块
Aug 17 Python
Prometheus开发中间件Exporter过程详解
Nov 30 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中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
php存储过程调用实例代码
2013/02/03 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php常用表单验证类用法实例
2015/06/18 PHP
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
[30:55]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第二场 11.18
2020/11/18 DOTA
Pyramid添加Middleware的方法实例
2013/11/27 Python
Django入门使用示例
2017/12/12 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
2014年大学生四年规划书范文
2014/04/03 职场文书
优秀乡村医生先进事迹材料
2014/08/23 职场文书
护士节活动总结
2014/08/29 职场文书
学校食堂标语
2014/10/06 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
幼师大班个人总结
2015/02/13 职场文书
退休教师追悼词
2015/06/23 职场文书
新学期主题班会
2015/08/17 职场文书
《游戏公平》教学反思
2016/02/20 职场文书
15个值得收藏的JavaScript函数
2021/09/15 Javascript
javascript的setTimeout()使用方法总结
2021/11/20 Javascript