如何从包含重复项的ID列表中生成唯一ID

时间:2015-11-14 19:52:08

标签: python python-2.7 pandas

我正在使用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_indexpd.factorize()index_col的内容,但它们无效。

1 个答案:

答案 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