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

基于分类变量滚动值创建过往高级经理经验虚拟变量

实现过往资深经理经验虚拟变量的方案

原始数据

datenamerolenamefirmname
2011-12-01JohnhelperA
2012-12-01JohnhelperA
2013-12-01JohnhelperA
2014-12-01JohnhelperB
2014-12-01Johnsenior managerC
2015-12-01JohnhelperB
2015-12-01Johnsenior managerC
2016-12-01Johnsenior managerC
2016-12-01Johnsenior managerD
2017-12-01JohnhelperE
2011-12-01Willsenior managerA
2012-12-01Willsenior managerA
2013-12-01Willsenior managerZ

需求说明

需要新增虚拟变量 dummy_sm_exp:当个人拥有其他公司的过往senior manager任职经验时,该变量取值为1,否则为0。具体规则:一旦个人在某家公司之外的其他公司担任过senior manager,从该时间点开始,所有后续记录(无论当前职位是什么)的dummy_sm_exp都为1。

示例结果

datenamerolenamefirmnamedummy_sm_exp
2011-12-01JohnhelperA0
2012-12-01JohnhelperA0
2013-12-01JohnhelperA0
2014-12-01JohnhelperB0
2014-12-01Johnsenior managerC0
2015-12-01JohnhelperB0
2015-12-01Johnsenior managerC0
2016-12-01Johnsenior managerC0
2016-12-01Johnsenior managerD1
2017-12-01JohnhelperE1
2011-12-01Willsenior managerA0
2012-12-01Willsenior managerA0
2013-12-01Willsenior managerZ1

实现思路与代码(Python pandas)

核心逻辑

  1. 按姓名分组,提取每个用户的senior manager任职记录
  2. 追踪用户到每个时间点为止的SM任职公司集合,判断是否存在两家及以上不同公司的经验
  3. 找到用户第一次满足条件的时间点,将该时间点及之后的所有记录的虚拟变量设为1

代码实现

import pandas as pd

# 加载原始数据(实际场景可替换为pd.read_csv等读取文件的方法)
data = pd.DataFrame({
    'date': ['2011-12-01', '2012-12-01', '2013-12-01', '2014-12-01', '2014-12-01',
             '2015-12-01', '2015-12-01', '2016-12-01', '2016-12-01', '2017-12-01',
             '2011-12-01', '2012-12-01', '2013-12-01'],
    'name': ['John']*10 + ['Will']*3,
    'rolename': ['helper', 'helper', 'helper', 'helper', 'senior manager',
                 'helper', 'senior manager', 'senior manager', 'senior manager', 'helper',
                 'senior manager', 'senior manager', 'senior manager'],
    'firmname': ['A', 'A', 'A', 'B', 'C', 'B', 'C', 'C', 'D', 'E', 'A', 'A', 'Z']
})

# 转换日期格式为datetime,确保时间比较的准确性
data['date'] = pd.to_datetime(data['date'])

# 初始化虚拟变量为0
data['dummy_sm_exp'] = 0

# 按姓名分组处理每个用户的记录
for name, group in data.groupby('name'):
    # 提取该用户所有senior manager的任职记录,按日期排序
    sm_group = group[group['rolename'] == 'senior manager'].sort_values('date')
    if len(sm_group) < 2:
        continue  # 只有一次或没有SM任职,无需修改虚拟变量
    
    # 计算到每个日期为止,该用户担任SM的公司集合
    sm_group['sm_firms'] = sm_group['firmname'].expanding().apply(lambda x: set(x))
    # 找到第一个拥有两家及以上不同公司SM经验的日期
    first_qualified_date = sm_group[sm_group['sm_firms'].apply(len) > 1]['date'].min()
    
    # 将该用户所有日期>=first_qualified_date的记录,dummy设为1
    data.loc[(data['name'] == name) & (data['date'] >= first_qualified_date), 'dummy_sm_exp'] = 1

# 输出结果(可替换为保存到文件)
print(data.to_string(index=False))

代码说明

  • 日期格式转换:确保后续时间比较的正确性
  • 分组处理:针对每个用户单独分析其SM任职轨迹
  • 窗口计算:通过expanding窗口逐步累积用户的SM任职公司,判断是否满足多公司经验条件
  • 批量更新:找到第一个满足条件的时间点后,一次性更新该用户后续所有记录的虚拟变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:40:41