国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

pandas or sql計算前后兩行數據間的增值方法

2020-02-22 23:46:41
字體:
來源:轉載
供稿:網友

遇到這樣一個需求,有一張表,要給這張表新增一個字段delta,delta的值等于每行的c1列的值減去上一行c1列的值。

我的解決方案,可以通過python的pandas的diff來實現,也可以通過sql來實現,如下

import pandas as pdsrcTable = 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   ts20 1 1500443161000 15004431612401 1 1500443162000 15004431629942 1 1500443163000 15004431630673 1 1500443164000 1500443164993 deltaTs1 deltaTs2 delay0  0.0  0.0 0.01 1000.0 1754.0 754.02 1000.0  73.0 -927.03 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) mainleft 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,15004431612401,1500443162000,15004431629941,1500443163000,15004431630671,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好像有。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乌兰县| 徐汇区| 阿勒泰市| 武冈市| 鄱阳县| 灌南县| 西华县| 会泽县| 新源县| 固原市| 建昌县| 郸城县| 毕节市| 卓资县| 石门县| 庆城县| 固原市| 南岸区| 日土县| 清丰县| 绥芬河市| 左云县| 镇原县| 虎林市| 福建省| 哈巴河县| 和林格尔县| 昂仁县| 青铜峡市| 黑河市| 东阳市| 洞口县| 汝南县| 南陵县| 衢州市| 安顺市| 石嘴山市| 锡林浩特市| 西乡县| 曲阳县| 盘锦市|