Python 如何在给定三个不同的唯一列的唯一行末尾添加计数器

Python 如何在给定三个不同的唯一列的唯一行末尾添加计数器,python,pandas,Python,Pandas,我正在将计数器添加到唯一行的末尾,但无法这样做。我有4列,即“ID”、“Name”、“Amount”。我面临的问题是,我想在唯一行“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', 'c

我正在将计数器添加到唯一行的末尾,但无法这样做。我有4列,即“ID”、“Name”、“Amount”。我面临的问题是,我想在唯一行“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

首先,仅按筛选重复的值,使用筛选和添加计数器,用于从
1
开始,将值转换为字符串,并使用右侧添加
。然后用
+=
分配到筛选的
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

在添加计数器时,您是否也在考虑其他唯一列?@Maddy6-是的,然后需要
m=df.duplicated(['Name','ID'],keep=False)
您能告诉我如何在R中使用dplyr@Maddy6-对不起,我不知道,因为
R
对我来说很难,但是你能帮我解决这个问题吗