繁体   English   中英

根据列组合在 dataframe 中创建唯一标识符,但仅适用于重复行

[英]create unique identifier in dataframe based on combination of columns, but only for duplicated rows

这里问题的推论: 根据列组合在 dataframe 中创建唯一标识符

在下面。 dataframe,

    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

我想创建一个新列,它根据 Lat、Lon 和 Area 列是否具有相同的值来分配唯一标识符。 例如,在这种情况下,第 1 行和第 2 行在这些列中具有相同的值,并将被赋予相同的唯一标识符 0_Iowa,其中 Iowa 来自 State 列。 但是,如果一行没有重复,那么我只想使用 state 名称。 最终结果应如下所示:

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    Illinois
18878   -36.0688    -62.3353    2017    138 Kansas  Kansas

您可以使用np.where

df['unique_id'] = np.where(df.duplicated(['Lat','Lon'], keep=False), 
                            df.groupby(['Lat','Lon'], sort=False).ngroup().astype('str') + '_' + df['State'],
                           df['State'])

或与pd.Series.where类似的想法:

df['unique_id'] = (df.groupby(['Lat','Lon'], sort=False)
                     .ngroup().astype('str')
                     .add('_' + df['State'])
                     .where(df.duplicated(['Lat','Lon'], keep=False),
                            df['State']
                           )
                    )

Output:

      id      Lat      Lon  Year  Area     State unique_id
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  Illinois
3  18878 -36.0688 -62.3353  2017   138    Kansas    Kansas

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM