我正在使用pandas包来处理我的数据,我的数据框如下所示。
data = pd.read_csv('people.csv')
id, A, B
John, 1, 3
Mary, 2, 5
John, 4, 6
John, 3, 7
Mary, 5, 2
我希望为这些副本生成唯一ID,但保持相同的顺序。
id, A, B
John, 1, 3
Mary, 2, 5
John.1, 4, 6
John.2, 3, 7 # John shows up three times.
Mary.1, 5, 2 # Mary shows up twice.
我尝试了类似set_index
,pd.factorize()
和index_col
的内容,但它们无效。
答案 0 :(得分:2)
为了获得索引,您可以使用GroupBy.cumcount
:
>>> idx = df.groupby('id').cumcount()
>>> idx
0 0
1 0
2 1
3 2
4 1
dtype: int64
非零值可以附加:
>>> mask = idx != 0
>>> df.loc[mask, 'id'] += '.' + idx[mask].astype('str')
>>> df
id A B
0 John 1 3
1 Mary 2 5
2 John.1 4 6
3 John.2 3 7
4 Mary.1 5 2