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实现识别相似图片小结
Feb 22 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
Jul 04 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
python微信聊天机器人改进版(定时或触发抓取天气预报、励志语录等,向好友推送)
Apr 25 Python
详解Numpy中的数组拼接、合并操作(concatenate, append, stack, hstack, vstack, r_, c_等)
May 27 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
Python各种扩展名区别点整理
Feb 27 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
关于django python manage.py startapp 应用名出错异常原因解析
Dec 15 Python
Python 可视化神器Plotly详解
Dec 26 Python
Python基于Opencv识别两张相似图片
Apr 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程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
JavaScript中令你抓狂的魔术变量
2006/11/30 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
关于在Servelet中如何获取当前时间的操作方法
2016/06/28 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
Angular工具方法学习
2016/12/26 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
深入理解JavaScript继承的多种方式和优缺点
2017/05/12 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
js中less常用的方法小结
2017/08/09 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
vue移动端城市三级联动组件使用详解
2019/07/26 Javascript
python实现360的字符显示界面
2014/02/21 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python如何快速实现分布式任务
2017/07/06 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
python 用下标截取字符串的实例
2018/12/25 Python
python实现支付宝转账接口
2019/05/07 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
2019/09/06 Python
安装PyInstaller失败问题解决
2019/12/14 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
python3.8动态人脸识别的实现示例
2020/09/21 Python
预备党员政审材料
2014/02/04 职场文书
小学生演讲稿大全
2014/04/25 职场文书
义和团口号
2014/06/17 职场文书
自强自立美德少年事迹材料
2014/08/16 职场文书
财务工作个人总结
2015/02/27 职场文书
2015年清明节扫墓演讲稿
2015/03/18 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
2015年高中语文教学总结
2015/08/18 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书