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天气预报采集器实现代码(网页爬虫)
Oct 07 Python
python实现telnet客户端的方法
Apr 15 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
python版学生管理系统
Jan 10 Python
python爬虫面试宝典(常见问题)
Mar 02 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
tensorflow多维张量计算实例
Feb 11 Python
python实现随机加减法生成器
Feb 24 Python
简单了解Python write writelines区别
Feb 27 Python
解决import tensorflow as tf 出错的原因
Apr 16 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
django教程如何自学
Jul 31 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小偷的核心程序
2007/04/09 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
2020/08/24 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
javascript 写类方式之三
2009/07/05 Javascript
JavaScript作用域链使用介绍
2013/08/29 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jsonp跨域请求数据实现手机号码查询实例分析
2015/12/12 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
JavaScript简单获取页面图片原始尺寸的方法
2016/06/21 Javascript
jQuery解析XML 详解及方法总结
2016/09/28 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
layui动态渲染生成select的option值方法
2019/09/23 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
如何理解python对象
2020/06/21 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
js实现移动端H5页面手指滑动刻度尺功能
2017/11/16 HTML / CSS
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
远程研修随笔感言
2014/02/10 职场文书
计划生育证明格式范本
2014/09/12 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书