pandas or sql計(jì)算前后兩行數(shù)據(jù)間的增值方法
遇到這樣一個(gè)需求,有一張表,要給這張表新增一個(gè)字段delta,delta的值等于每行的c1列的值減去上一行c1列的值。
我的解決方案,可以通過(guò)python的pandas的diff來(lái)實(shí)現(xiàn),也可以通過(guò)sql來(lái)實(shí)現(xiàn),如下
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)
出來(lái)的效果如下:
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語(yǔ)句,我用的是mysql,自己構(gòu)造行號(hào)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 | +------+---------------+----------+---------------+----------+
測(cè)試數(shù)據(jù)如下
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);
貌似有些數(shù)據(jù)庫(kù)有這種當(dāng)前行減去上一行數(shù)據(jù)的函數(shù),具體我沒(méi)有研究過(guò)。有知道的朋友可以告訴我一下,我印象中像Sqlserver好像有。
相關(guān)文章
使用python繪制cdf的多種實(shí)現(xiàn)方法
今天小編就為大家分享一篇使用python繪制cdf的多種實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python實(shí)現(xiàn)視頻中添加音頻工具詳解
本文主要為大家介紹了Python中提供在無(wú)音頻的視頻中添加音頻的工具詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考一下2021-12-12
Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實(shí)例
今天小編就為大家分享一篇Django 根據(jù)數(shù)據(jù)模型models創(chuàng)建數(shù)據(jù)表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05
Python使用fliecmp實(shí)現(xiàn)比較文件的操作
對(duì)于文件的比較一般有幾種,比如比較文件的內(nèi)容,比較文件的大小,或者直接對(duì)比整個(gè)項(xiàng)目文件,本文就詳細(xì)的介紹這些方法的實(shí)現(xiàn),感興趣的可以了解一下2021-06-06
基于打開(kāi)pycharm有帶圖片md文件卡死問(wèn)題的解決
這篇文章主要介紹了基于打開(kāi)pycharm有帶圖片md文件卡死問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
詳解Python中數(shù)據(jù)的多種存儲(chǔ)形式
這篇文章主要介紹了Python中數(shù)據(jù)的多種存儲(chǔ)形式,主要有JSON?文件存儲(chǔ)、CSV?文件存儲(chǔ)、關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)及非關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Django RBAC權(quán)限管理設(shè)計(jì)過(guò)程詳解
這篇文章主要介紹了Django RBAC權(quán)限管理設(shè)計(jì)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
Pycharm關(guān)閉控制臺(tái)多余窗口的解決辦法
這篇文章主要介紹了Pycharm關(guān)閉控制臺(tái)多余窗口的解決辦法,文中通過(guò)圖文結(jié)合的方式講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12

