1

我有一个数据框,其中包含某个列中某个值的多个外观。我想通过在新列中添加某种引用来设置这些值的唯一性。例如,假设我有一个带有 ID 列的数据框:

          ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908

我想创建一个新列,比如“newID”,它看起来像这样:

          ID
7     2035200584_1
8     2035200584_2
9     2035200584_3
31    2038128459_1
32    2038128459_2
33    2038128459_3
42    2053561908_1
43    2053561908_2
44    2053561908_3

我尝试使用 groupby 机制,但没有成功。使用简单的应用机制是可以的,但似乎有点麻烦(我需要保留一个字典,其中包含每个 ID 的出现计数器)

有没有一种我想念的简单有效的方法来做到这一点?

4

1 回答 1

3

下面是 DSM 解决方案的一个细微变化:

import pandas as pd
import io

content = io.BytesIO('''index ID
7     2035200584
8     2035200584
9     2035200584
31    2038128459
32    2038128459
33    2038128459
42    2053561908
43    2053561908
44    2053561908''')

df = pd.read_table(content, sep='\s+', header=0)

df['ID'] = df.groupby('ID')['ID'].transform(
    lambda x: map('{:.0f}_{:.0f}'.format, x, x.rank('first')))

print(df)

产量

   index            ID
0      7  2035200584_1
1      8  2035200584_2
2      9  2035200584_3
3     31  2038128459_1
4     32  2038128459_2
5     33  2038128459_3
6     42  2053561908_1
7     43  2053561908_2
8     44  2053561908_3
于 2013-10-13T14:21:53.263 回答