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操作ie登陆土豆网的方法
May 09 Python
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
Python正则表达式使用经典实例
Jun 21 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
对python的文件内注释 help注释方法
May 23 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
Jun 21 Python
Python3连接SQLServer、Oracle、MySql的方法
Jun 28 Python
详解配置Django的Celery异步之路踩坑
Nov 25 Python
在Python中利用pickle保存变量的实例
Dec 30 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
python_array[0][0]与array[0,0]的区别详解
Feb 18 Python
Python数据可视化之基于pyecharts实现的地理图表的绘制
Jun 10 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
discuz的php防止sql注入函数
2011/01/17 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
学习PHP session的传递方式
2016/06/15 PHP
php微信开发之自定义菜单实现
2016/11/18 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
JavaScript的eval JSON object问题
2009/11/15 Javascript
jQuery 自定义函数写法分享
2012/03/30 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
2016/04/29 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Node.js操作系统OS模块用法分析
2019/01/04 Javascript
Node.js事件的正确使用方法
2019/04/05 Javascript
详解jQuery中的getAll()和cleanData()
2019/04/15 jQuery
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
python单例模式实例分析
2015/04/08 Python
进一步了解Python中的XML 工具
2015/04/13 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
深入理解python多进程编程
2016/06/12 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
python 读取文件并替换字段的实例
2018/07/12 Python
利用python循环创建多个文件的方法
2018/10/25 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
个人批评与自我批评总结
2014/10/17 职场文书
2014年学生会干事工作总结
2014/11/07 职场文书
军训后的感想
2015/08/07 职场文书
《雪地里的小画家》教学反思
2016/02/16 职场文书
启动Tomcat时出现大量乱码的解决方法
2021/06/21 Java/Android