pandas 基于两列创建新ID

oprakyz7  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(75)

我有一个类似这样的框架:
| 名称|ID|
| --|--|
| 一| 1 |
| B| 2 |
| 一| 1 |
| C| 3 |
| B| 3 |
| D| 3 |
| E| 1 |
| F| 2 |
正如你所看到的,有些ID有多个名字,我想改变ID,这样每个名字的新示例都有一个唯一的ID,理想情况下,生成的ID列看起来像这样:
不幸的是,我不能使用ngroup(),因为有超过35,000个ID。
| 名称|ID| ID_new|
| --|--|--|
| 一| 1 |1_1|
| B| 2 |2_1|
| 一| 1 |1_1|
| C| 3 |3_1|
| B| 2 |2_1|
| D| 3 |3_2|
| E| 1 |1_2|
| F| 2 |2_2|
所有的帮助是赞赏!
我使用了.ngroup()+ 1,但正如我所说的,ID太多了,我也使用了cumcount()+ 1,但这使得'_'后面的数字每次增加一个,导致非唯一的ID。

pod7payv

pod7payv1#

GroupBy.transform中的lambda函数中对每个组使用factorize,并通过Series.str.catID连接:

f = lambda x: pd.factorize(x)[0] + 1
s = df.groupby('ID')['Name'].transform(f).astype(str)
df['ID_new'] = df['ID'].astype(str).str.cat(s, sep='_')
print (df)
  Name  ID ID_new
0    A   1    1_1
1    B   2    2_1
2    A   1    1_1
3    C   3    3_1
4    B   2    2_1
5    D   3    3_2
6    E   1    1_2
7    F   2    2_2

字符串

相关问题