Python 如何在给定三个不同的唯一列的唯一行末尾添加计数器
我正在将计数器添加到唯一行的末尾,但无法这样做。我有4列,即“ID”、“Name”、“Amount”。我面临的问题是,我想在唯一行“ID”列的末尾添加计数器,但请确保我也在考虑其他唯一行 这是我正在使用的数据帧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
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
对我来说很难,但是你能帮我解决这个问题吗