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读取csv文件示例(python操作csv)
Mar 11 Python
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
python实现指定字符串补全空格的方法
Apr 30 Python
python中函数默认值使用注意点详解
Jun 01 Python
Django项目开发中cookies和session的常用操作分析
Jul 03 Python
Django实战之用户认证(用户登录与注销)
Jul 16 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python实现tail -f 功能
Jan 17 Python
Python3爬虫发送请求的知识点实例
Jul 30 Python
python安装cx_Oracle和wxPython的方法
Sep 14 Python
python中封包建立过程实例
Feb 18 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构造函数实例讲解
2013/11/13 PHP
使用GD库生成带阴影文字的图片
2015/03/27 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP扩展框架之Yaf框架的安装与使用
2016/05/18 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
提高网站信任度的技巧
2008/10/17 Javascript
基于jquery的DIV随滚动条滚动而滚动的代码
2012/07/20 Javascript
JS跨域代码片段
2012/08/30 Javascript
浅谈javascript 归并方法
2015/01/21 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
IE7浏览器窗口大小改变事件执行多次bug及IE6/IE7/IE8下resize问题
2015/08/21 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
Vue2.0结合webuploader实现文件分片上传功能
2018/03/09 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
node.js中path路径模块的使用方法实例分析
2020/02/13 Javascript
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
python中redis的安装和使用
2016/12/04 Python
详解Django 中是否使用时区的区别
2018/06/14 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
BookOutlet加拿大:在网上书店购买廉价折扣图书和小说
2018/10/05 全球购物
最新自我评价范文
2013/11/16 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
PostgreSQL解析URL的方法
2021/08/02 PostgreSQL
NGINX 权限控制文件预览和下载的实现原理
2022/01/18 Servers
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python