>我有一个数据帧
df=pd.DataFrame({'id': [1, 2, 2, 4], 'animal': ['dog', 'cat', 'bear', 'mouse']})
# just rearranging the order a bit
df=df[['id', 'animal', 'name']]
id animal Seq
1 dog 14
2 cat 17
2 bear 19
4 mouse 23
正如您在上面看到的,ID 不是唯一的,我想创建一个唯一的 ID。 我想的一个选项是分组依据(ID(,然后创建一个新列,我可以在其中创建一个计数器。然后也许合并计数器和 ID 以创建一个唯一的 ID。
id animal Seq Counter NewID(counter+id)
1 dog 14 1 11
2 cat 17 1 21
2 bear 19 2 22
4 mouse 23 1 41
我不确定如何实现这一目标
将GroupBy.cumcount
用于计数器并添加到原始id
转换为字符串Series.add
:
df['NewID'] = df['id'].astype(str).add(df.groupby('id').cumcount().add(1).astype(str))
print (df)
id animal NewID
0 1 dog 11
1 2 cat 21
2 2 bear 22
3 4 mouse 41
试试这个:
import pandas as pd
df=pd.DataFrame({'id': [1, 2, 2, 4], 'animal': ['dog', 'cat', 'bear', 'mouse']})
df = df.assign(id=(df['animal']).astype('category').cat.codes + 1)
df
输出为:
id animal
0 3 dog
1 2 cat
2 1 bear
3 4 mouse