Python 在groupby之后为组中的每个唯一值分配唯一ID

Python 在groupby之后为组中的每个唯一值分配唯一ID,python,pandas,group-by,pandas-groupby,Python,Pandas,Group By,Pandas Groupby,我在R中看到了解决方案,但在python中没有看到。如果问题重复,请向我指出之前提出的问题/解决方案 我有一个如下的数据帧 df = pd.DataFrame({'col1': ['a','b','c','c','d','e','a','h','i','a'],'col2':['3:00','3:00','4:00','4:00','3:00','5:00','5:00','3:00','3:00','2:00']}) df Out[83]: col1 col2 0 a 3:0

我在R中看到了解决方案,但在python中没有看到。如果问题重复,请向我指出之前提出的问题/解决方案

我有一个如下的数据帧

df = pd.DataFrame({'col1': ['a','b','c','c','d','e','a','h','i','a'],'col2':['3:00','3:00','4:00','4:00','3:00','5:00','5:00','3:00','3:00','2:00']})

df
Out[83]: 
  col1  col2
0    a  3:00
1    b  3:00
2    c  4:00
3    c  4:00
4    d  3:00
5    e  5:00
6    a  5:00
7    h  3:00
8    i  3:00
9    a  2:00    
我想做的是按“col1”分组,并为col2中的不同值分配一个唯一ID,如下所示:

col1  col2  ID
 a    2:00   0
 a    3:00   1
 a    5:00   2
 b    3:00   0
 c    4:00   0
 c    4:00   0
 ... 
我试着使用pd.Categorial,但无法达到我想要的程度。 非常感谢您的帮助。谢谢。

我们可以使用以下方法:


@用户4279562,很高兴它有帮助:)@MaxU-不要比较,它会正确返回不同的输出。顺便说一句,答案很好,更多的时候使用它+1:)@MaxU-是的,我注意到你回答了一些关于这个的答案。。好主意。@MaxU啊,对不起,有一堆类似的问答没有链接,我链接得太过火了。删除了我所有的评论。祝ML好运!
In [170]: df['ID'] = df.groupby('col1')['col2'].transform(lambda x: pd.factorize(x)[0])

In [171]: df
Out[171]:
  col1  col2  ID
0    a  3:00   0
1    b  3:00   0
2    c  4:00   0
3    c  4:00   0
4    d  3:00   0
5    e  5:00   0
6    a  5:00   1
7    h  3:00   0
8    i  3:00   0
9    a  2:00   2