首页 > 解决方案 > 为对应于两列的匹配创建一个唯一 id

问题描述

我想创建一个列,该列生成一个与我的数据框中的两个列匹配的唯一 ID。

下面是示例数据框:

df = pd.DataFrame({'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})

我想要一个既匹配品牌又匹配地址但不匹配月份的索引

df = pd.DataFrame({ 'id':[1,1,2,3,4,5] 'month': [1, 2, 1, 3,4,5], 'brand': [76, 76, Arco, Shell, Arco, Cheveron],'address': [aa, aa, ab, bc, cd,de]})

标签: python-3.xpandas

解决方案


DataFrame.insert与 一起使用GroupBy.ngroup

df.insert(0, 'id', df.groupby(['brand','address'], sort=False)['month'].ngroup() + 1)
print (df)
   id  month     brand address
0   1      1        76      aa
1   1      2        76      aa
2   2      1      Arco      ab
3   3      3     Shell      bc
4   4      4      Arco      cd
5   5      5  Cheveron      de

或将列连接在一起并使用factorize

s = df['brand'].astype(str) + '-' + df['address'].astype(str)
df.insert(0, 'id', pd.factorize(s)[0] + 1)

推荐阅读