熊猫或sql计算前后两行数据间的增值方法

  

遇到这样一个需求,有一张表,要给这张表新增一个字段三角洲、三角洲的值等于每行c1的列的值减去上一行c1列的值。

  

        熊猫作为pd导入      srcTable=pd.read_csv (“pos1.csv”)   打印(srcTable)   destTable=srcTable.loc [srcTable。tid==1,[‘壹空间’,‘ts2]] .sort_values(=耙伎占洹?   destTable。列=[' deltaTs1 ', ' deltaTs2 ']   destTable=destTable.diff ()   destTable=destTable.fillna (0)   destTable[‘延迟’]=destTable [' deltaTs2 '] - destTable (“deltaTs1”)   打印(destTable)   之前      

<>强出来的效果如下:

        tid壹空间ts2   0 1 1500443161000 1500443161240   1 1 1500443162000 1500443162994   2 1 1500443163000 1500443163067   3 1 1500443164000 1500443164993   deltaTs1 deltaTs2延迟   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>选择main.t_id,   main.ts1,   ifnull deltaTs1 (main.ts1-sub.ts1, 0),   main.ts2,   ifnull (main.ts2-sub.ts2 0) deltaTs2   (选择t_id,壹空间、ts2 (@r1:=@r1 + 1)从pos1 rn,(选择@r1:=0) r t_id=1按壹空间)主要   左连接   (选择t_id,壹空间、ts2 (@r2:=@r2 + 1)从pos1 rn,(选择@r2:=0) r t_id=1按壹空间)子   在main.rn-1=sub.rn;   + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +   | t_id |壹空间| deltaTs1 | ts2 | deltaTs2 |   + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +   | 1 | 1500443161000 | 0 | 1500443161000 | 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、1500443164000            创建表“pos1”(   “t_id”int(11)默认为空,   壹空间的bigint(22)默认为空,   ts2的bigint(22)默认为空   )引擎=InnoDB默认字符集=utf8;   插入pos1值(1,1500443161000,1500443161000);   插入pos1值(1,1500443162000,1500443162000);   插入pos1值(1,1500443163000,1500443163000);   插入pos1值(1,1500443164000,1500443164000);      

貌似有些数据库有这种当前行减去上一行数据的函数,具体我没有研究过。有知道的朋友可以告诉我一下,我印象中像好状态"置疑"像有。

熊猫或sql计算前后两行数据间的增值方法