给定数据框,我想将isActive
列值设置为True
仅重复的值,并将'_duplicate'添加到Name
列。
df =
Name isActive LoginDate
John False 2021
John False 2022
Fred False 2020
期望输出:
df =
Name isActive LoginDate
John_duplicate True 2021
John False 2022
Fred False 2020
现在我能够为每个副本添加数字,但我想跳过最近的登录日期,并向最古老的添加文本。并更改布尔值:
df.LoginDate = ad.groupby('LoginDate').LoginDate.apply(lambda n: n + (np.arange(len(n))+1).astype(str))
任何建议吗?
使用Series.duplicated
作为Name
的第一个值,并将duplicated
与keep=False
链接为Name
,并将isActive
列与附加子字符串添加到Name
:
m = ~df['Name'].duplicated() & df['Name'].duplicated(keep=False)
df['isActive'] = m
df.loc[m, 'Name'] += '_duplicate'
print (df)
Name isActive LoginDate
0 John_duplicate True 2021
1 John False 2022
2 Fred False 2020