Python 将重复值转换为唯一值

Python 将重复值转换为唯一值,python,dataframe,Python,Dataframe,列的重复值需要转换为唯一值 我有一个带有特定r*c的数据帧。我需要考虑一个列,它基本上是具有多个重复ID的ID列。需要将ID设置为唯一的。假设我有下面提到的df: data = [['tom', 10], ['nick', 15], ['juli', 14], ['juli', 14], ['juli', 14]] df = pd.DataFrame(data, columns = ['Name', 'Age']) df Actual Result: Name Ag

列的重复值需要转换为唯一值

我有一个带有特定r*c的数据帧。我需要考虑一个列,它基本上是具有多个重复ID的ID列。需要将ID设置为唯一的。假设我有下面提到的df:

data = [['tom', 10], ['nick', 15], ['juli', 14], ['juli', 14], ['juli', 14]] 

df = pd.DataFrame(data, columns = ['Name', 'Age']) 

df 

Actual Result: 

    Name    Age
0   tom 10
1   nick    15
2   juli    14
3   juli    15
4   juli    16


Expected Result:

    Name    Age
0   tom 10
1   nick    15
2   juli_1  14
3   juli_2  15
4   juli_3  16

您可以将
窗口
-函数与秩函数结合使用来创建新的唯一ID。另请参阅以下帖子:

如果您只需要唯一ID(
名称
),您可以尝试以下操作:

data = [['tom', 10], ['nick', 15], ['juli', 14], ['juli', 14], ['juli', 14]] 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
suffix = df.groupby(df.Name)\
      .cumcount()\
      .astype(str)\
      .str.replace('0', '')\
      .values
df.Name = df.Name + suffix
输出:

    Name    Age
0   tom     10
1   nick    15
2   juli    14
3   juli1   14
4   juli2   14
试试这个:

data = [['tom', 10], ['nick', 15], ['juli', 14], ['juli', 14], ['juli', 14]] 
df = pd.DataFrame(data, columns = ['Name', 'Age']) 
suffix = df.groupby(df.Name)\
      .cumcount()\
      .astype(str)\
      .str.replace('0', '')\
      .values
df.Name = df.Name + suffix
from collections import Counter
keys = [x[0] for x in data]
duplicates = [key for key,value in Counter(keys).items() if value>1]

for i in range(len(duplicates)):
    index = 0
    for j in range(len(data)):
        if data[j][0] == duplicates[i]:
            if index> 0:
                data[j][0] += str(index)
            index +=1




这是我尝试过的,它对我有效。。。。我接受了帮助并声明了一个用于重命名重复值的类

类重命名器(): def初始化(自身): self.d=dict()

然后我对dataframe列使用了apply函数

df['ID']=df['ID'].apply(rename())

这将解决您的问题