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

基于提交日期排序并标记版本升级类型的Pandas实现问题

解决方案

核心思路

  1. 将字符串类型的版本号转换为可结构化比较的对象,兼容1.0(两位)、1.0.1(三位)等格式;
  2. 按id分组后以commitDate排序,确保版本记录按时间顺序排列;
  3. 逐组对比相邻版本的major/minor/patch字段,按规则生成标记标签。

步骤代码

1. 安装依赖(若未安装)

pip install packaging

2. 完整处理代码

import pandas as pd
from packaging.version import Version

# 假设你的DataFrame名为df,包含commitDate、info_version、id字段
# 1. 将字符串版本号转换为可比较的Version对象
df['version_obj'] = df['info_version'].apply(Version)

# 2. 按id分组,再按commitDate升序排序(确保时间顺序)
df_sorted = df.sort_values(by=['id', 'commitDate'], ascending=[True, True]).reset_index(drop=True)

# 3. 定义版本变化判断函数
def judge_version_change(prev_ver, curr_ver):
    if prev_ver is None:
        return 'initial'  # 每个id的第一条记录,无前置版本
    if curr_ver == prev_ver:
        return 'no change'
    
    # 处理无patch字段的版本(如1.0默认patch为0)
    prev_major, prev_minor, prev_patch = (prev_ver.major, prev_ver.minor, prev_ver.patch if hasattr(prev_ver, 'patch') else 0)
    curr_major, curr_minor, curr_patch = (curr_ver.major, curr_ver.minor, curr_ver.patch if hasattr(curr_ver, 'patch') else 0)
    
    minor_changed = curr_minor != prev_minor
    patch_changed = curr_patch != prev_patch
    
    if minor_changed and patch_changed:
        return 'minor-patch'
    elif minor_changed:
        return 'minor'
    elif patch_changed:
        return 'patch'
    else:
        # major版本变更的情况
        return 'major'

# 4. 对每个id组应用函数,生成标签列
df_sorted['change_label'] = df_sorted.groupby('id')['version_obj'].transform(
    lambda x: [judge_version_change(None, x.iloc[0])] + [judge_version_change(x.iloc[i-1], x.iloc[i]) for i in range(1, len(x))]
)

# 可选:删除临时的version_obj列
df_sorted = df_sorted.drop(columns=['version_obj'])

关键说明

  • packaging.version.Version会自动解析不同格式的版本号,统一为major/minor/patch结构,完美兼容1.0这类两位版本(自动补patch=0);
  • 分组排序确保每个id的版本记录严格按时间顺序排列,避免因原始数据顺序混乱导致的对比错误;
  • 函数中明确区分了版本无变化、minor+patch同时升级、单独minor/patch升级、major升级等场景,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 15:39:21