列的重复值需要转换为唯一值
我有一个带有特定r * c的数据框。我需要考虑一列,基本上是具有多个重复ID的ID列。这些ID必须具有唯一性。假设我有以下提到的df:
Nsid
答案 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())