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解析发往本机的数据包示例 (解析数据包)
Jan 16 Python
python 换位密码算法的实例详解
Jul 19 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
Pandas:DataFrame对象的基础操作方法
Jun 07 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
Python实现的批量修改文件后缀名操作示例
Dec 07 Python
python实现列表的排序方法分享
Jul 01 Python
关于tf.TFRecordReader()函数的用法解析
Feb 17 Python
如何提高python 中for循环的效率
Apr 15 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
python实现会员管理系统
Mar 18 Python
pandas时间序列之pd.to_datetime()的实现
Jun 16 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
咖啡的种类和口感
2021/03/03 新手入门
php中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
浅谈ThinkPHP5.0版本和ThinkPHP3.2版本的区别
2017/06/17 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
javascript 按键事件(兼容各浏览器)
2013/12/20 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
原生js实现日历效果
2020/03/02 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
python判断图片宽度和高度后删除图片的方法
2015/05/22 Python
浅谈python写入大量文件的问题
2018/11/09 Python
深入浅析Python中的迭代器
2019/06/04 Python
python使用Pandas库提升项目的运行速度过程详解
2019/07/12 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
python 解决函数返回return的问题
2020/12/05 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
国际领先的在线时尚服装和配饰店:DressLily
2019/03/03 全球购物
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
高中毕业生个人自我鉴定
2013/11/24 职场文书
精通CAD能手自荐书
2014/01/31 职场文书
软件项目开发计划书
2014/05/01 职场文书
社区两委对照检查材料
2014/08/23 职场文书
普通党员对照检查材料
2014/08/28 职场文书
同意迁入证明模板
2014/10/26 职场文书
介绍长城的导游词
2015/01/30 职场文书
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python