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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
Python使用tablib生成excel文件的简单实现方法
Mar 16 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
python shapely.geometry.polygon任意两个四边形的IOU计算实例
Apr 12 Python
Python 使用dict实现switch的操作
Apr 07 Python
Python中三种花式打印的示例详解
Mar 19 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网页游戏学习之Xnova(ogame)源码解读(十四)
2014/06/26 PHP
PHP动态规划解决0-1背包问题实例分析
2015/03/23 PHP
php自动加载方式集合
2016/04/04 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
js 表格隔行颜色
2009/12/02 Javascript
关于scrollLeft,scrollTop的浏览器兼容性测试
2013/03/19 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
JavaScript调用浏览器打印功能实例分析
2015/07/17 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
原生javascript实现读写CSS样式的方法详解
2017/02/20 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
使用async、enterproxy控制并发数量的方法详解
2018/01/02 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python for循环与range函数的使用详解
2019/03/23 Python
python将四元数变换为旋转矩阵的实例
2019/12/04 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
Django扫码抽奖平台的配置过程详解
2021/01/14 Python
详解HTML5新增标签
2017/11/27 HTML / CSS
HTC VIVE美国官网:VR虚拟现实眼镜
2018/02/13 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
生产车间主管岗位职责
2013/12/28 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
后备干部培训方案
2014/05/22 职场文书
三问三解心得体会
2014/09/05 职场文书
银行给客户的感谢信
2015/01/23 职场文书
食堂管理制度范本
2015/08/04 职场文书