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

基于Pandas DataFrame角色数据库计算管理层任职时长

解决思路与代码实现

没问题,我来帮你搞定这个需求!咱们先理清楚核心目标:要针对每个公司,找到现任最新的个人,然后计算这个人在该公司的任职时长(也就是从他最早入职的年份到最新年份的差值)。下面是一步步的实现方案:

步骤拆解

  • 第一步:定位每个公司最新年份对应的任职人员
  • 第二步:找出该人员在对应公司的最早任职年份
  • 第三步:计算两个年份的差值,得到任职时长
  • 第四步:整理成以公司为索引的最终结果

完整代码示例

首先咱们先构造一个符合你描述的示例数据集(方便你测试):

import pandas as pd

# 模拟你的角色数据库
data = {
    'individual': ['Alice', 'Alice', 'Bob', 'Charlie', 'Charlie', 'Charlie'],
    'company': ['A', 'A', 'A', 'B', 'B', 'B'],
    'year': [2019, 2023, 2018, 2021, 2022, 2023]
}
df = pd.DataFrame(data)

接下来执行核心逻辑:

# 1. 获取每个公司最新年份的任职记录(拿到现任人员)
latest_roles = df.loc[df.groupby('company')['year'].idxmax()]

# 2. 计算每个员工在对应公司的最早入职年份
min_join_years = df.groupby(['company', 'individual'])['year'].min().reset_index()

# 3. 合并数据并计算任职时长
merged = pd.merge(latest_roles, min_join_years, on=['company', 'individual'])
merged['tenure'] = merged['year_x'] - merged['year_y']

# 4. 整理成目标格式:以公司为索引,值为任职时长
final_result = merged.set_index('company')['tenure']

运行后输出final_result就会得到你想要的结果:

company
A    4
B    2
Name: tenure, dtype: int64

关键逻辑说明

  • df.groupby('company')['year'].idxmax():这个方法会返回每个公司组内年份最大的那条记录的索引,用loc就能直接定位到现任人员的最新记录。
  • groupby(['company', 'individual'])['year'].min():因为同一个员工可能在同一家公司有多个年份的记录,所以需要按「公司+员工」分组来找到他最早的入职年份。
  • 合并后用最新年份减去最早年份,就得到了该员工在这家公司的任职时长。

如果你的数据集里存在某公司只有一条记录的情况,这个逻辑也能自动处理(任职时长为0),完全适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:40:05