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入门篇之对象类型
Oct 17 Python
Python运用于数据分析的简单教程
Mar 27 Python
python写入并获取剪切板内容的实例
May 31 Python
Pandas之ReIndex重新索引的实现
Jun 25 Python
对Django url的几种使用方式详解
Aug 06 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
YUV转为jpg图像的实现
Dec 09 Python
Python创建空列表的字典2种方法详解
Feb 13 Python
Python 判断时间是否在时间区间内的实例
May 16 Python
Python抓包并解析json爬虫的完整实例代码
Nov 03 Python
python plt.plot bar 如何设置绘图尺寸大小
Jun 01 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
如何在php中正确的使用json
2013/08/06 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
js left,right,mid函数
2008/06/10 Javascript
js简单实现让文本框内容逐个字的显示出来
2013/10/22 Javascript
JS Array创建及concat()split()slice()的使用方法
2016/06/03 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
vue基础之模板和过滤器用法实例分析
2019/03/12 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
深入浅析ng-bootstrap 组件集中 tabset 组件的实现分析
2019/07/19 Javascript
手把手教你如何编译打包video.js
2020/12/09 Javascript
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
python 常用的基础函数
2018/07/10 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Django数据库迁移常见使用方法
2020/11/12 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Python编写万花尺图案实例
2021/01/03 Python
咖啡为什么会有酸味?你喝到的咖啡為什麼是酸的?
2021/03/17 冲泡冲煮
Html5 canvas画图白板踩坑
2020/06/01 HTML / CSS
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
大学生收银员求职信分享
2014/01/02 职场文书
汽车装潢店创业计划书范文
2014/02/05 职场文书
会计演讲稿范文
2014/05/23 职场文书
供应链金融服务方案
2014/05/25 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
销售工作决心书
2015/02/04 职场文书
2015年人事科工作总结
2015/04/28 职场文书
创业计划书之寿司
2019/07/19 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
Linux中文件的基本属性介绍
2022/06/01 Servers