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使用正则表达式提取网页URL的方法
May 26 Python
Python中列表和元组的相关语句和方法讲解
Aug 20 Python
Python获取CPU、内存使用率以及网络使用状态代码
Feb 08 Python
Python入门必须知道的11个知识点
Mar 21 Python
python获取命令行输入参数列表的实例代码
Jun 23 Python
基于Python列表解析(列表推导式)
Jun 23 Python
pandas去除重复列的实现方法
Jan 29 Python
Django REST framework 视图和路由详解
Jul 19 Python
Django单元测试工具test client使用详解
Aug 02 Python
python求解汉诺塔游戏
Jul 09 Python
Python如何使用ElementTree解析xml
Oct 12 Python
Python中对象的比较操作==和is区别详析
Feb 12 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP中的use关键字概述
2014/07/23 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
PHP 实现base64编码文件上传出现问题详解
2020/09/01 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
JS backgroundImage控制
2009/05/19 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
IE下Ajax缓存问题的快速解决方法(get方式)
2014/01/09 Javascript
JS比较2个日期间隔的示例代码
2014/04/15 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
JavaScript控制输入框中只能输入中文、数字和英文的方法【基于正则实现】
2017/03/03 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
React-router中结合webpack实现按需加载实例
2017/05/25 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
Python最基本的数据类型以及对元组的介绍
2015/04/14 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
2020/06/02 Python
selenium3.0+python之环境搭建的方法步骤
2021/02/01 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
COACH德国官方网站:纽约现代奢侈品牌,1941年
2018/06/09 全球购物
决心书范文
2014/03/11 职场文书
志愿者活动总结报告
2014/06/27 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
详细谈谈MYSQL中的COLLATE是什么
2021/06/11 MySQL
html5实现点击弹出图片功能
2021/07/16 HTML / CSS