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实现类的静态变量用法实例
May 08 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
python中模块查找的原理与方法详解
Aug 11 Python
Python实现Dijkstra算法
Oct 17 Python
通过 Django Pagination 实现简单分页功能
Nov 11 Python
python常用数据重复项处理方法
Nov 22 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
python实现在线翻译
Jun 18 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 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
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP7常量数组用法分析
2016/09/26 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
js写的方法实现上传图片之后查看大图
2014/03/05 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
JS获取指定月份的天数两种实现方法
2018/06/22 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
python实现提取百度搜索结果的方法
2015/05/19 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
详解Python中的相对导入和绝对导入
2017/01/06 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
Python实现基于KNN算法的笔迹识别功能详解
2018/07/09 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
python中的时区问题
2021/01/14 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
C++是不是类型安全的
2014/02/18 面试题
客服主管岗位职责
2013/12/13 职场文书
销售队伍口号
2014/06/11 职场文书
心理学专业求职信
2014/06/16 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
护士医德医风自我评价
2014/09/15 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
小学校园广播稿
2015/08/18 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis
golang内置函数len的小技巧
2021/07/25 Golang