Python数据框架基于其他id列创建索引列



我有一个这样的数据帧:

ID                  Price
000afb96ded6677c    1514.5
000afb96ded6677c    13.0
000afb96ded6677c    611.0
000afb96ded6677c    723.0
000afb96ded6677c    2065.0
ffea14e87a4e1269    2286.0
ffea14e87a4e1269    1150.0
ffea14e87a4e1269    80.0
fff455057ad492da    650.0
fff5fc66c1fd66c2    450.0

我需要一个ID列,它可以从1迭代到有多少行,但我需要它像下面的代码一样:

ID                  Price    ID 2
000afb96ded6677c    1514.5   1
000afb96ded6677c    13.0     1
000afb96ded6677c    611.0    1
000afb96ded6677c    723.0    1
000afb96ded6677c    2065.0   1
ffea14e87a4e1269    2286.0   2
ffea14e87a4e1269    1150.0   2
ffea14e87a4e1269    80.0     2
fff455057ad492da    650.0    3
fff5fc66c1fd66c2    450.0    4

尝试groupby ngroup+1:

df['ID_2'] = df.groupby('ID').ngroup() + 1

或使用Rank:

df['ID_2'] = df['ID'].rank(method='dense').astype(int)

或使用pd.factorize:

df['ID_2'] = pd.factorize(df['ID'])[0] + 1

df:

ID   Price  ID_2
0  000afb96ded6677c  1514.5     1
1  000afb96ded6677c    13.0     1
2  000afb96ded6677c   611.0     1
3  000afb96ded6677c   723.0     1
4  000afb96ded6677c  2065.0     1
5  ffea14e87a4e1269  2286.0     2
6  ffea14e87a4e1269  1150.0     2
7  ffea14e87a4e1269    80.0     2
8  fff455057ad492da   650.0     3
9  fff5fc66c1fd66c2   450.0     4

最新更新