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实现清屏的方法
Apr 30 Python
书单|人生苦短,你还不用python!
Dec 29 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
Python读取系统文件夹内所有文件并统计数量的方法
Oct 23 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
python学生信息管理系统实现代码
Dec 17 Python
Python字典底层实现原理详解
Dec 18 Python
python3 实现调用串口功能
Dec 26 Python
Pytorch之卷积层的使用详解
Dec 31 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 Python
详解非极大值抑制算法之Python实现
Jun 28 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
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
PHP 循环删除无限分类子节点的实现代码
2013/06/21 PHP
PHP的Socket网络编程入门指引
2015/08/11 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JS中如何实现复选框全选功能
2016/12/19 Javascript
JS回调函数简单用法示例
2017/02/09 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
Vue.Draggable实现拖拽效果
2020/07/29 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
最简单的JS实现json转csv的方法
2019/01/10 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
JS把字符串格式的时间转换成几秒前、几分钟前、几小时前、几天前等格式
2019/07/10 Javascript
记一次用ts+vuecli4重构项目的实现
2020/05/21 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[31:33]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第一场
2014/05/23 DOTA
python事件驱动event实现详解
2018/11/21 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
PyTorch加载预训练模型实例(pretrained)
2020/01/17 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
python 如何上传包到pypi
2020/12/24 Python
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
大学校庆邀请函
2014/01/11 职场文书
大学自主招生自荐信范文
2014/02/26 职场文书
寒山寺导游词
2015/02/03 职场文书
论文答辩开场白大全
2015/05/27 职场文书
60句有关成长的名言
2019/09/04 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android