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

如何创建函数遍历经理层级列填充DataFrame的attrition_rate NaN值?

解决方案:基于经理层级向上填充attrition_rate缺失值

前提假设

先明确两个DataFrame的常见结构(若你的结构不同,可调整代码对应字段):

  • df1:包含员工邮箱、直属上级邮箱(supervisor_email)、各层级经理邮箱(manager_01_email至manager_04_email,01为顶层)、季度字段(quarter)
  • df_attr:包含邮箱(email)、季度(quarter)、attrition_rate(含NaN或缺失值)

实现步骤

  1. 构建高效查找映射
    先把df_attr中有效(非NaN)的attrition_rate转成以(季度, 邮箱)为键的字典,减少后续查找耗时:

    import pandas as pd
    import numpy as np
    
    # 过滤NaN值,构建映射表
    attr_map = df_attr.dropna(subset=['attrition_rate']).set_index(['quarter', 'email'])['attrition_rate'].to_dict()
    
  2. 定义层级遍历填充函数
    针对每一行数据,从直属上级开始向上遍历经理层级,返回第一个找到的有效attrition_rate:

    def fill_attrition(row):
        quarter = row['quarter']
        # 按直属上级→上一级经理→顶层经理的顺序遍历,去重避免重复查找
        hierarchy = list(dict.fromkeys([
            row['supervisor_email'],
            row['manager_03_email'],
            row['manager_02_email'],
            row['manager_01_email']
        ]))
        
        for email in hierarchy:
            key = (quarter, email)
            if key in attr_map:
                return attr_map[key]
        # 所有层级无有效数据时返回NaN,可按需修改为默认值
        return np.nan
    
  3. 应用函数填充数据
    对df1逐行应用函数,生成填充后的字段:

    df1['filled_attrition_rate'] = df1.apply(fill_attrition, axis=1)
    

示例验证

用示例数据测试(可替换为你的真实数据):

# 示例df1
df1 = pd.DataFrame({
    'employee_email': ['emp1@test.com', 'emp2@test.com', 'emp3@test.com'],
    'supervisor_email': ['mgr4@test.com', 'mgr4@test.com', 'mgr3@test.com'],
    'manager_04_email': ['mgr4@test.com', 'mgr4@test.com', 'mgr3@test.com'],
    'manager_03_email': ['mgr3@test.com', 'mgr3@test.com', 'mgr2@test.com'],
    'manager_02_email': ['mgr2@test.com', 'mgr2@test.com', 'mgr1@test.com'],
    'manager_01_email': ['mgr1@test.com', 'mgr1@test.com', 'mgr1@test.com'],
    'quarter': ['Q2_2024', 'Q2_2024', 'Q2_2024']
})

# 示例df_attr
df_attr = pd.DataFrame({
    'email': ['mgr4@test.com', 'mgr3@test.com', 'mgr2@test.com', 'mgr1@test.com'],
    'quarter': ['Q2_2024', 'Q2_2024', 'Q2_2024', 'Q2_2024'],
    'attrition_rate': [np.nan, np.nan, 0.12, 0.08]
})

运行后df1的filled_attrition_rate列会分别返回0.12、0.12、0.08,符合向上遍历取最近有效数据的需求。

内容的提问来源于stack exchange,提问作者wjie08

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:03:25