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 相关文章推荐
Windows环境下python环境安装使用图文教程
Mar 13 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
python3利用venv配置虚拟环境及过程中的小问题小结
Aug 01 Python
python爬取指定微信公众号文章
Dec 20 Python
Python3内置模块之base64编解码方法详解
Jul 13 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
Python动态声明变量赋值代码实例
Dec 30 Python
自学python用什么系统好
Jun 23 Python
python与pycharm有何区别
Jul 01 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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导出CSV抽象类实例
2014/09/24 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
JS 去前后空格大全(IE9亲测)
2013/07/15 Javascript
javascript设置金额样式转换保留两位小数示例代码
2013/12/04 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
jquery 鼠标滑动显示详情应用示例
2014/01/24 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
json格式数据的添加,删除及排序方法
2016/01/21 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
微信端开发--登录小程序步骤
2017/01/11 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
Python isinstance判断对象类型
2008/09/06 Python
python中定义结构体的方法
2013/03/04 Python
python中元类用法实例
2014/10/10 Python
Python常用随机数与随机字符串方法实例
2015/04/09 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
简单实现Python爬取网络图片
2018/04/01 Python
详解python中@的用法
2019/03/27 Python
在tensorflow中实现屏蔽输出的log信息
2020/02/04 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
女大学生自我鉴定
2013/12/09 职场文书
八年级音乐教学反思
2014/01/09 职场文书
岗位说明书范文
2014/05/07 职场文书
巾帼文明岗事迹材料
2014/12/24 职场文书
西湖英语导游词
2015/02/06 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis