我将计数器添加到唯一行的末尾,但无法执行。我有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.add1开头,将值转换为字符串,并使用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/

10-16 02:35