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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python日志模块logging简介
Apr 13 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
Jun 14 Python
Django 路由系统URLconf的使用
Oct 11 Python
Python任意字符串转16, 32, 64进制的方法
Jun 12 Python
Python PyCharm如何进行断点调试
Jul 05 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
使用Tensorboard工具查看Loss损失率
Feb 15 Python
树莓派升级python的具体步骤
Jul 05 Python
用Python 爬取猫眼电影数据分析《无名之辈》
Jul 24 Python
Python tensorflow卷积神经Inception V3网络结构
May 06 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
Yii操作数据库的3种方法
2014/03/11 PHP
纯php生成随机密码
2015/10/30 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
2013/07/04 Javascript
Javascript中的getUTCHours()方法使用详解
2015/06/10 Javascript
Javascript函数的参数
2015/07/16 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
angularjs 实现带查找筛选功能的select下拉框实例
2017/01/11 Javascript
ajax分页效果(bootstrap模态框)
2017/01/23 Javascript
web前端vue实现插值文本和输出原始html
2018/01/19 Javascript
Vue项目路由刷新的实现代码
2019/04/17 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
js 数据类型判断的方法
2020/12/03 Javascript
Python中的包和模块实例
2014/11/22 Python
python 3.7.0 下pillow安装方法
2018/08/27 Python
Python简易版图书管理系统
2019/08/12 Python
Django发送邮件功能实例详解
2019/09/02 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
opencv+python实现鼠标点击图像,输出该点的RGB和HSV值
2020/06/02 Python
基于OpenCV的网络实时视频流传输的实现
2020/11/15 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
幼儿园新学期寄语
2014/01/18 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
青年安全生产示范岗事迹材料
2014/05/04 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
技术比武方案
2014/05/19 职场文书
小学生安全保证书
2015/05/09 职场文书
个人原因辞职信模板
2015/05/13 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书