pandas or sql计算前后两行数据间的增值方法

 更新时间:2018年04月20日 16:29:33   作者:tulinying  
下面小编就为大家分享一篇pandas or sql计算前后两行数据间的增值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

遇到这样一个需求,有一张表,要给这张表新增一个字段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好像有。

相关文章

  • PyTorch搭建一维线性回归模型(二)

    PyTorch搭建一维线性回归模型(二)

    这篇文章主要为大家详细介绍了PyTorch搭建一维线性回归模型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • Python实战之手写一个搜索引擎

    Python实战之手写一个搜索引擎

    这篇文章主要介绍了Python实战之手写一个搜索引擎,文中有非常详细的代码示例,对正在学习python的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • LyScript实现Hook改写MessageBox的方法详解

    LyScript实现Hook改写MessageBox的方法详解

    LyScript可实现自定义汇编指令的替换功能。用户可自行编写汇编指令,将程序中特定的通用函数进行功能改写与转向操作,此功能原理是简单的Hook操作。本文将详细介绍Hook改写MessageBox的方法,感兴趣的可以了解一下
    2022-09-09
  • Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    Python3 操作 MySQL 插入一条数据并返回主键 id的实例

    这篇文章主要介绍了Python3 操作 MySQL 插入一条数据并返回主键 id的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python实现数据库编程方法详解

    Python实现数据库编程方法详解

    这篇文章主要介绍了Python实现数据库编程方法,较为详细的总结了Python数据库编程涉及的各种常用技巧与相关组件,需要的朋友可以参考下
    2015-06-06
  • python绘制折线图和条形图的方法

    python绘制折线图和条形图的方法

    这篇文章主要为大家详细介绍了python实现折线图和条形图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 基于Python解密仿射密码

    基于Python解密仿射密码

    这篇文章主要介绍了基于Python解密仿射密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Python实现图像增强

    Python实现图像增强

    这篇文章主要为大家详细介绍了Python实现图像增强,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 详解python算法之冒泡排序

    详解python算法之冒泡排序

    这篇文章主要介绍了详解python算法之冒泡排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Python操作列表的常用方法分享

    Python操作列表的常用方法分享

    这篇文章主要介绍了Python操作列表的常用方法,需要的朋友可以参考下
    2014-02-02

最新评论