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中的函数用法入门教程
Sep 02 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
python实现梯度下降算法
Mar 24 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
Pytorch模型转onnx模型实例
Jan 15 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 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
基于mysql的论坛(4)
2006/10/09 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
PHP 批量删除数据的方法分析
2009/10/30 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
使用js写的一个简易的投票
2013/11/27 Javascript
jQuery中parents()和parent()的区别分析
2014/10/28 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
AngularJS应用开发思维之依赖注入3
2016/08/19 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
利用PM2部署node.js项目的方法教程
2017/05/10 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
详解Vue调用手机相机和相册以及上传
2019/05/05 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
jQuery实现日历效果
2020/09/11 jQuery
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
django drf框架自带的路由及最简化的视图
2019/09/10 Python
python、PyTorch图像读取与numpy转换实例
2020/01/13 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
凯撒娱乐:Caesars Entertainment
2018/02/23 全球购物
十佳大学生村官事迹
2014/01/09 职场文书
顶岗实习计划书
2015/01/16 职场文书
社区元宵节活动总结
2015/02/06 职场文书
杭白菊导游词
2015/02/10 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书
2019教师的学习计划
2019/06/25 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis
详解flex:1什么意思
2022/07/23 HTML / CSS