我有一个数据框,其中包含某个列中某个值的多个外观。我想通过在新列中添加某种引用来设置这些值是唯一的。例如,假设我有一个带有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的外观计数器)
是否有一种简单有效的方法可以解决这个问题?
答案 0 :(得分: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