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

基于DataFrame检测版本回退并按ID统计次数的实现方案

问题描述

给定如下DataFrame:

id   info_version
124             2.0.0
124             2.0.0
124             1.0.0
124             1.5.6
124             0.4.5
345             v2alpha1
345             v1alpha1
348             1.0.0-Snapshot
348             1.0.0-Snapshot

需要按id统计info_version字段的版本回退次数(比如从2.0.0到1.0.0、v2到v1都算回退),最终输出格式如下:

id     count
124                2
345                1
348                0
解决方案

步骤1:安装依赖

若未安装packaging库,执行以下命令:

pip install packaging

步骤2:代码实现

import pandas as pd
from packaging import Version

# 构造示例DataFrame
df = pd.DataFrame({
    'id': [124, 124, 124, 124, 124, 345, 345, 348, 348],
    'info_version': ['2.0.0', '2.0.0', '1.0.0', '1.5.6', '0.4.5', 'v2alpha1', 'v1alpha1', '1.0.0-Snapshot', '1.0.0-Snapshot']
})

# 统一解析版本号,处理带v前缀的情况
def parse_version(v):
    if v.startswith('v'):
        v = v[1:]
    return Version(v)

# 统计单组内的版本回退次数
def count_rollbacks(group):
    versions = group['info_version'].apply(parse_version)
    # 比较当前版本与前一个版本,统计回退次数
    return (versions.shift(1) > versions).sum()

# 按id分组统计
result = df.groupby('id').apply(count_rollbacks).reset_index(name='count')

print(result)

代码说明

  • parse_version函数:移除版本号开头的v前缀,用Version类统一解析,确保不同格式的版本(如正式版、预发布版、快照版)能正确比较。
  • count_rollbacks函数:对每个id的版本序列,通过shift(1)获取前一个版本,统计当前版本小于前一个版本的次数,即回退次数。
  • 最终通过groupby+apply完成按id的聚合统计,输出符合要求的结果。

运行结果

执行代码后输出:

id  count
0  124      2
1  345      1
2  348      0

内容的提问来源于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.22 05:32:03