我将计数器添加到唯一行的末尾,但无法执行。我有4列,即“ ID”,“名称”,“金额”。我面临的问题是我想在唯一行“ Id”列的末尾,但请确保我也在考虑其他唯一行。
这是我正在使用的数据帧。
Amount ID Name
0 110 c121 abc
1 120 c121 abc
2 120 c123 sdd
3 140 c124 eet
df = {'ID':['c121', 'c121', 'c123', 'c124'], 'Name':['abc', 'abc','sdd','eet'],'Amount':[110,120,120,140]}
df = pd.DataFrame(df)
当前df
Amount ID Name
0 110 c121 abc
1 120 c121 abc
2 120 c123 sdd
3 140 c124 eet
预期结果:
Amount ID Name
0 110 c121_1 abc
1 120 c121_2 abc
2 120 c123 sdd
3 140 c124 eet
最佳答案
首先用Series.duplicated
过滤重复的值,用boolean indexing
过滤它们,并用GroupBy.cumcount
添加计数器,使用Series.add
以1
开头,将值转换为字符串,并使用Series.radd
加上_
右边。然后使用ID
分配给已过滤的+=
列:
#for test duplicates in ID column
m = df['ID'].duplicated(keep=False)
#for test duplicates in Name and ID columns
#m = df.duplicated(['Name', 'ID'], keep=False)
df.loc[m, 'ID'] += df[m].groupby('ID').cumcount().add(1).astype(str).radd('_')
选择:
df.loc[m, 'ID'] = df.loc[m, 'ID'] + '_' + df[m].groupby('ID').cumcount().add(1).astype(str)
print (df)
ID Name Amount
0 c121_1 abc 110
1 c121_2 abc 120
2 c123 sdd 120
3 c124 eet 140
关于python - 给定三个不同的唯一列,如何在唯一行的末尾添加计数器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57917971/