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

如何无需循环生成DataFrame的version列以跟踪文件版本

问题描述

现有存储文件创建日期和升级日期的DataFrame,需新增version列跟踪文件版本。

原始数据集

fileIDcreationDateupgradeDate
file_102/02/2022 15:00:0002/02/2022 15:00:00
file_102/02/2022 15:00:0002/02/2022 15:30:00
file_102/02/2022 15:00:0010/02/2022 10:00:00
file_203/02/2022 15:00:0003/02/2022 15:00:00
file_304/02/2022 15:00:0004/02/2022 15:00:00
file_304/02/2022 15:00:0005/02/2022 15:00:00

期望结果

fileIDcreationDateupgradeDateversion
file_102/02/2022 15:00:0002/02/2022 15:00:001
file_102/02/2022 15:00:0002/02/2022 15:30:002
file_102/02/2022 15:00:0010/02/2022 10:00:003
file_203/02/2022 15:00:0003/02/2022 15:00:001
file_304/02/2022 15:00:0004/02/2022 15:00:001
file_304/02/2022 15:00:0005/02/2022 15:00:002

现有循环实现

ids = df['fileID'].unique().tolist()
for id in ids:
    df.loc[df['fileID'] == id, 'version'] = range(1, len(df.loc[df['fileID'] == id]) + 1)

无循环解决方案

方法1:groupby + cumcount()(推荐)

先按fileID和upgradeDate排序,确保版本号按升级时间顺序分配,再通过分组计数生成版本号:

# 先排序保证版本顺序正确
df = df.sort_values(['fileID', 'upgradeDate'])
# 生成version列,cumcount从0开始计数,加1得到从1起始的版本号
df['version'] = df.groupby('fileID').cumcount() + 1

方法2:groupby + rank()

通过对每个文件的upgradeDate排名生成版本号,method='first'确保相同日期(如果存在)按出现顺序排名:

df['version'] = df.groupby('fileID')['upgradeDate'].rank(method='first').astype(int)

两种方法均为Pandas矢量化操作,相比循环效率更高,尤其适合大规模数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:01:22