【问题标题】:How to generate unique ids when mapping pairs of values from two sets in Python在 Python 中映射来自两个集合的值对时如何生成唯一 ID
【发布时间】:2020-02-18 14:55:25
【问题描述】:

我有 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。

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

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

【问题讨论】:

    标签: python pandas list dictionary


    【解决方案1】:

    您可以从排序开始,这样您就可以利用 diffing 查找 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
    

    【讨论】:

    • 非常感谢! @rafaelc。我不知道 cumsum() 函数。谢谢!。
    猜你喜欢
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2015-09-25
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多