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

如何用Python pandas groupby实现职级变动耗时的三元组分析?

职级变动耗时分析实现方案

以下是用Python pandas处理该需求的具体步骤:

1. 准备工作与数据读取

首先确保安装了pandas和对应Excel读取依赖(如openpyxl处理xlsx文件),然后读取数据并做预处理:

import pandas as pd

# 替换为你的Excel文件路径
df = pd.read_excel("职级数据.xlsx")

# 将date转为数值类型(如果是年份格式),如果是完整日期可转成datetime后提取年份
df['date'] = pd.to_numeric(df['date'])

# 把l1/l2这类职级转为数字,方便后续计算
df['rank_num'] = df['rank'].str.extract('(\d+)').astype(int)

2. 分组排序

按员工ID分组,每组内按时间升序排列,保证职级变动的顺序正确:

# 先全局按id和date排序,再分组
sorted_df = df.sort_values(by=['id', 'date'])
grouped = sorted_df.groupby('id')

3. 生成职级变动三元组

遍历每个员工的记录,对比连续两条数据生成(rankA, rankB, timeDiff):

change_records = []
for _, group in grouped:
    # 遍历组内除最后一条外的所有记录,和下一条做对比
    for idx in range(len(group) - 1):
        current_rank = group.iloc[idx]['rank_num']
        next_rank = group.iloc[idx+1]['rank_num']
        time_diff = group.iloc[idx+1]['date'] - group.iloc[idx]['date']
        change_records.append( (current_rank, next_rank, time_diff) )

# 输出结果,和你期望的一致
print(change_records)  # 输出: [(1, 2, 1), (2, 3, 2), (2, 3, 3)]

4. 计算不同职级变动的平均耗时

把变动记录转为DataFrame,按职级变动组合分组计算平均值:

change_df = pd.DataFrame(change_records, columns=['rankA', 'rankB', 'timeDiff'])
avg_time = change_df.groupby(['rankA', 'rankB'])['timeDiff'].mean().reset_index()
print(avg_time)

注意事项

  • 如果你的date是完整日期格式(如2009-05-10),可以用df['date'] = pd.to_datetime(df['date'])转换后,用df['date'].dt.year提取年份,或者直接计算日期差(结果为天数,可按需转换为年/月)。
  • 如果职级格式不是l+数字,可以用字典映射转换,比如:rank_map = {'l1':1, 'l2':2, 'l3':3}; df['rank_num'] = df['rank'].map(rank_map)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 04:30:40