pandas or sql计算前后两行数据间的增值方法
作者:tulinying 发布时间:2022-08-08 09:36:30
标签:pandas,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好像有。
来源:https://blog.csdn.net/tulinying/article/details/75381886
0
投稿
猜你喜欢
- 由于个人能力有限,文章中难免会出现错误或遗漏的地方,敬请谅解!同时欢迎你指出,以便我能及时修改,以免误导下一个看官。最后希望本文能给你带来一
- 本文将结合实例代码,介绍 OpenCV 如何查找轮廓、获取边界框。代码: contours.pyOpenCV 提供了 findContour
- 题目:在提示符下使用open打开一个文件刚开始网上看了下打开的方式,结果一直实现不了,报错是没找到这个文件,而且和我输入的文件名不一样。错误
- 优化场景利用视图函数(views)查询数据之后可以通过上下文context、字典、列表等方式将数据传递给HTML模板,由template引擎
- 如果你学过操作系统,那么对于锁应该不陌生。锁的含义是线程锁,可以用来指定某一个逻辑或者是资源同一时刻只能有一个线程访问。这个很好理解,就好像
- 今天给大家分享一个简单的python脚本,使用python进行http的接口测试,脚本很简单,逻辑是:读取excel写好的测试用例,然后根据
- 问题: pydev使用wx库开发的过程中,import时碰到wx可以识别,但是其它很多函数和变量上面全部是红叉,即无法识别。 解决方法: 1
- 如下所示:def read_data(file_name): ''' file_name:文件地址 '
- <?php $link=mysql_connect("localhost",&
- 一: 删除LOG1:分离数据库 企业管理器->服务器->数据库->右键->分离数据库2:删除LOG文件3:附加数据库 企业管理器->服务器-
- 本文实例讲述了Python实现的本地文件搜索功能。分享给大家供大家参考,具体如下:偶尔需要搜索指定文件,不想每次都在windows下面去搜索
- 引言算法思路假设我们有这样一个生物族群,他们的每个基因片段都是一个个三角形(即只含三个点和颜色信息),他们每个个体表现出的性状就是若干个三角
- ------谁正在访问数据库?Select c.sid, c.serial#,c.username,a.object_id,b.
- 应用场景这段代码可以用于修改Excel文件的元数据,例如作者、主题、描述等,通过使用Python和Openpyxl模块,以及wxPython
- 判断是否xx开始使用startswith示例代码:String = "12345 上山打老虎"if str(String
- ScrapyScrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时
- 本文实例讲述了Python实现按中文排序的方法。分享给大家供大家参考,具体如下:安装中文库sudo apt-get updatesudo a
- 本文讲解了一个使用XML技术上传文件的例子,使用该方法没有传统方法中的种种限制。 这个例子讲述了如何使用MSXML3.0和ADO Strea
- 一:修改文件上传语言为PHP 打开fckconfig.js 找到: var _FileBrowserLanguage = 'asp&
- 当我们采用s=[[0]*3]*2初始化一个数组,然后对s[0][0]进行赋值,改变的是第一列所有的值。因为用s = [[0]*3]*2 初始