使重复的值成为唯一的

时间:2019-10-30 09:40:54

标签: python dataframe

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

我有一个带有特定r * c的数据框。我需要考虑一列,基本上是具有多个重复ID的ID列。这些ID必须具有唯一性。假设我有以下提到的df:

Nsid

4 个答案:

答案 0 :(得分:1)

如果仅需要唯一ID(在这种情况下为Name),则可以尝试以下操作:

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

答案 1 :(得分:0)

您可以结合使用Window函数和Rank函数来创建新的唯一ID。另请参见以下帖子:SQL-like window functions in PANDAS: Row Numbering in Python Pandas Dataframe

答案 2 :(得分:0)

尝试一下:

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



答案 3 :(得分:0)

这是我尝试过的方法,它为我工作。...我寻求帮助,并声明了一个用于重命名重复值的类。

类重命名器():     def init (自己):         self.d = dict()

def __call__(self, x):
    if x not in self.d:
        self.d[x] = 0
        return x
    else:
        self.d[x] += 1
        return "%s_%d" % (x, self.d[x])

然后我只是将apply函数应用于dataframe列。

df ['ID'] = df ['ID']。apply(renamer())