Python- 根据另一个变量重命名重复的值

6

有没有一种方法可以根据另一个变量来重命名值?这里我有两列,一列是ID,另一列是水果。然而,我在想是否可以根据ID来唯一地识别它们。

ID  Fruits
1    Apple
1   Banana
1   Orange
1   Banana
2    Apple
2   Orange
2   Orange
3    Apple
3    Apple
3   Orange

我希望你能够帮我实现类似于这样的功能。
ID  Fruits
1    Apple
1   Banana
1   Orange
1  Banana1
2    Apple
2   Orange
2  Orange1
3    Apple
3   Apple1
3   Orange

1
我已经使用你的图片更新了问题中的数据框。将来请以文本形式发布数据框,而不是图片。 - user3483203
1个回答

6

设置

df = pd.DataFrame({
    'id': [1,1,1,1,2,2,2,3,3,3],
    'fruit': ['Apple', 'Banana', 'Orange', 'Banana', 'Apple', 'Orange', 'Orange', 'Apple', 'Apple', 'Orange']
})

选项1
使用cumcount,结合replace和字符串连接(我使用的正则表达式模式只匹配单个零,因此此答案还支持每组超过9个重复项):

df['fruit'] = df.fruit + df.groupby(
    ['id', 'fruit']).cumcount().astype(str).replace(
    r'^0$', '', regex=True
)

选项 2
存储 groupby 并使用布尔索引与 fillna(我个人更喜欢这种方法)。

s = df.groupby(['id', 'fruit']).cumcount()
df['fruit'] = (df.fruit + s[s>0].astype(str)).fillna(df.fruit)

两者都会导致:

   id    fruit
0   1    Apple
1   1   Banana
2   1   Orange
3   1  Banana1
4   2    Apple
5   2   Orange
6   2  Orange1
7   3    Apple
8   3   Apple1
9   3   Orange

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接