根据列组合在数据框中创建唯一标识符

use*_*827 4 python pandas

我有以下数据框:

    id  Lat         Lon         Year    Area    State
50319   -36.0629    -62.3423    2019    90  Iowa
18873   -36.0629    -62.3423    2017    90  Iowa
18876   -36.0754    -62.327     2017    124 Illinois
18878   -36.0688    -62.3353    2017    138 Kansas
Run Code Online (Sandbox Code Playgroud)

我想创建一个新的列,其指定基于列是否唯一的标识符LatLon并且Area具有相同的价值观。例如,在这种情况下,行1和2具有在那些列中的相同的值,并且将被给予相同的唯一标识符0_Iowa,其中Iowa来自于State列中。我尝试使用 for 循环,但有没有更 Pythonic 的方法来做到这一点?

id       Lat         Lon       Year    Area State   unique_id
50319   -36.0629    -62.3423    2019    90  Iowa    0_Iowa
18873   -36.0629    -62.3423    2017    90  Iowa    0_Iowa
18876   -36.0754    -62.327     2017    124 Illinois    1_Illinois
18878   -36.0688    -62.3353    2017    138 Kansas  2_Kansas
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 5

我会groupby.ngroup设置sort=False分组并str.cat连接State设置分隔符:

df['Sate'] = (df.groupby(['Lat','Lon','Area'], sort=False)
                .ngroup() 
                .astype(str)
                .str.cat(df.State, sep='_'))
Run Code Online (Sandbox Code Playgroud)
print(df)

      id      Lat      Lon  Year  Area     State        Sate
0  50319 -36.0629 -62.3423  2019    90      Iowa      0_Iowa
1  18873 -36.0629 -62.3423  2017    90      Iowa      0_Iowa
2  18876 -36.0754 -62.3270  2017   124  Illinois  1_Illinois
3  18878 -36.0688 -62.3353  2017   138    Kansas    2_Kansas
1
?
Run Code Online (Sandbox Code Playgroud)