Pandas:对日期更早的重复项设置isActive为True并修改Name列
解决方案
我们可以通过分组标记+条件批量修改来实现需求,具体操作如下:
完整代码实现
import pandas as pd # 初始化示例DataFrame df = pd.DataFrame({ 'Name': ['John', 'John', 'Fred'], 'isActive': [False, False, False], 'LoginDate': [2021, 2022, 2020] }) # 1. 按Name分组,获取每个用户的最新登录日期 latest_login = df.groupby('Name')['LoginDate'].transform('max') # 2. 生成布尔掩码:标记出登录日期早于最新日期的条目 need_modify = df['LoginDate'] != latest_login # 3. 对符合条件的条目批量修改字段 df.loc[need_modify, 'Name'] = df.loc[need_modify, 'Name'] + '_duplicate' df.loc[need_modify, 'isActive'] = True print(df)
代码说明
transform('max')会为每个Name组的每一行返回组内最大的登录日期,方便和每行的LoginDate做对比need_modify是布尔数组,精准定位需要修改的重复项(非最新登录的条目)- 用
df.loc批量修改符合条件的行,比循环处理更高效简洁
运行后输出结果:
Name isActive LoginDate 0 John_duplicate True 2021 1 John False 2022 2 Fred False 2020
内容的提问来源于stack exchange,提问作者Mamed
相关产品推荐
相关产品推荐

