Skip to main content
 首页 » 编程设计

python之在 Python 中映射来自两个集合的值对时如何生成唯一 ID

2024年09月03日39lonelyxmas

我有 2 列,第 1 列:集群,第 2 列:车辆

    Cluster VehicleID 
435 1   2 
264 1   1 
444 1   1 
302 1   1 
191 1   1 
383 1   1 
81  1   1 
142 2   1 
6   2   1 
420 2   1 
153 2   1 
42  2   2 
168 2   1 
292 2   2 
138 2   2 
65  2   2 
316 2   1 
219 2   1 
329 2   1 
371 3   1 

基本上,这告诉集群 1 有两辆车:[1,2] 并且集群有 1 辆车。上表是一个小样本。 所以,我有集群 1:[1,2]、集群 2:[1] 我想要的是集群 1 的车辆 1 需要映射为 1,2 为 2。但是,集群 2 的车辆 1 应映射为 3。

简而言之,它们应该是连续的并且与“Cluster”列无关。

我不知道哪里出错了。 请帮忙。

请您参考如下方法:

您可以从排序开始,这样您就可以利用 diff 查找 ID 何时更改,然后使用 cumsum 检索您的累积 ID。

initial = df.index 
 
df = df.sort_values(['Cluster', 'VehicleID']) 
 
df['new-ID'] = (df.VehicleID.diff().ne(0) | df.Cluster.diff().eq(1)).cumsum() 
 
df.loc[initial] # back to initial ordering 

     Cluster  VehicleID  new-ID 
435        1          2       2 
264        1          1       1 
444        1          1       1 
302        1          1       1 
191        1          1       1 
383        1          1       1 
81         1          1       1 
142        2          1       3 
6          2          1       3 
420        2          1       3 
153        2          1       3 
42         2          2       4 
168        2          1       3 
292        2          2       4 
138        2          2       4 
65         2          2       4 
316        2          1       3 
219        2          1       3 
329        2          1       3 
371        3          1       5