遇到这样一个需求,有一张表,要给这张表新增一个字段三角洲、三角洲的值等于每行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计算前后两行数据间的增值方法