传感器重新启动后继续ID计数

问题描述 投票:0回答:1

我有来自带有ObjectID和时间戳的传感器的数据集。

id      id   x   y   height  datetime
21124   494 243 243 4524    2019-09-11 11:53:58.958
21125   438 345 189 1016    2019-09-11 11:53:58.958
21126   309 314 168 1050    2019-09-11 11:53:58.958
21127   502 488 229 2535    2019-09-11 11:53:58.958
21128   503 228 159 831     2019-09-11 11:53:58.958
21129   506 234 272 4056    2019-09-11 11:53:58.958
21130   507 515 284 2477    2019-09-11 11:53:58.958
21131   508 471 107 1115    2019-09-11 11:53:58.958
21132   2   558 95  1050    2019-09-11 12:06:43.340
21133   3   379 100 1323    2019-09-11 12:06:43.340
21134   6   222 240 4860    2019-09-11 12:06:43.340
21135   2   430 277 2008    2019-09-11 12:06:43.340
21136   5   246 251 3987    2019-09-11 12:06:43.340
21137   6   378 114 1303    2019-09-11 12:06:43.340
21138   4   322 271 3133    2019-09-11 12:06:43.340
21139   3   339 123 1626    2019-09-11 12:06:43.340
21140   4   356 159 979     2019-09-11 12:06:43.340
21141   5   465 152 1440    2019-09-11 12:06:43.340

有时,传感器会自行重新启动,并再次从头开始计算对象ID。 (请参见11:53/12:06的时间间隔)。问题:重新启动后,如果该ID在数据集中已经存在过,请从最后一个ID继续计数。

因此,重新启动后,它应该以继续对最后一个ID进行计数的ID代替ID,而不是在重新启动后以“ 2”重新开始,此处为“ 508”。

ID 2、3、6等早已出现在数据集中,因此需要替换它们。这有意义吗?

谢谢您的帮助!

python pandas replace
1个回答
0
投票

步骤1:通过获取max(id)]的索引来识别您的“好” ID

max_id = max(df['id'])
max_loc = df.loc[df['id']==max_id]['id'].index[0] 

因此:

ok_ids = list(df[df.index<=max_loc]['id'])

步骤2:

获取从max_id枚举的new_id。
import numpy as np
new_ids = np.arange(1+max_id,max_id+len(df[df.index>max_loc])+1,1)

步骤3:

扩展并替换id列:
ok_ids.extend(new_ids)
df['id']=ok_ids

所需结果:

         id id.1    x   y   height  datetime
21124   494 243   243   4524    2019-09-11  11:53:58.958
21125   438 345   189   1016    2019-09-11  11:53:58.958
21126   309 314   168   1050    2019-09-11  11:53:58.958
21127   502 488   229   2535    2019-09-11  11:53:58.958
21128   503 228   159   831 2019-09-11  11:53:58.958
21129   506 234   272   4056    2019-09-11  11:53:58.958
21130   507 515   284   2477    2019-09-11  11:53:58.958
21131   508 471   107   1115    2019-09-11  11:53:58.958
21132   509 558   95    1050    2019-09-11  12:06:43.340
21133   510 379   100   1323    2019-09-11  12:06:43.340
21134   511 222   240   4860    2019-09-11  12:06:43.340
21135   512 430   277   2008    2019-09-11  12:06:43.340
21136   513 246   251   3987    2019-09-11  12:06:43.340
21137   514 378   114   1303    2019-09-11  12:06:43.340
21138   515 322   271   3133    2019-09-11  12:06:43.340
21139   516 339   123   1626    2019-09-11  12:06:43.340
21140   517 356   159   979 2019-09-11  12:06:43.340
21141   518 465   152   1440    2019-09-11  12:06:43.340

注意:请勿尝试更改df ['id'],因为它会在returning a view versus a copy (SettingWithCopyWarnning)上警告您”>

热门问题
推荐问题
最新问题