You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas中如何实现离职年限≥10年的用户个人信息替换为用户ID?

问题解决方案

错误原因分析

原有代码的核心问题是在for循环内直接对整列df1['years']赋值,每次循环都会把全表的years列更新为当前行的计算结果,所以最后全列都会保留最后一次循环的计算值,自然无法按行匹配条件完成信息替换。

正确实现代码

Pandas优先使用向量化操作替代逐行循环,执行效率更高且不会出现整列覆盖的问题:

import pandas as pd
from datetime import datetime
from dateutil.relativedelta import relativedelta

# 统一转换离职日期为datetime格式,空值会转为NaT
df1['EXIT_DATE'] = pd.to_datetime(df1['EXIT_DATE'], errors='coerce')

# 批量计算所有行的离职年限,空日期默认记为0年
df1['years'] = df1['EXIT_DATE'].apply(
    lambda edate: relativedelta(datetime.today(), edate).years 
    if pd.notna(edate) 
    else 0
)

# 筛选离职≥10年的行掩码
replace_mask = df1['years'] >= 10

# 批量替换指定个人信息字段为对应用户ID
# 注意原代码列名拼写错误:middel_name → middle_name
df1.loc[replace_mask, ['first_name', 'middle_name', 'email']] = df1.loc[replace_mask, 'user_id']

# 不需要保留years列可执行删除
# df1.drop('years', axis=1, inplace=True)

注意事项

  • 替换操作左右两侧均使用同一个掩码筛选,保证行对齐,避免错位赋值
  • 增加了空日期的兼容逻辑,避免日期为空时出现计算报错
  • 修正了原代码中middel_name的拼写错误,防止因列名不匹配导致替换不生效

内容的提问来源于stack exchange,提问作者Prashanth M C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:27:04