我想创建一个生成唯一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]})
答案 0 :(得分:0)
将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)