Skip to main content
 首页 » 编程设计

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

2025年05月04日21Renyi-Fan

我有一个 DataFrame 如下。

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     

我想做的是 groupby '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.Categorical,但无法完全达到我想要的效果。

请您参考如下方法:

我们可以使用pd.factorize()方法:

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