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

Pandas如何按文档分组筛选各分组字母序最新版本对应的全部数据行

Pandas 按文档分组筛选最新版本全量条目实现

问题场景

现有存储各文档不同版本下所有条目的DataFrame,例:doc1的A版本包含条目1、2,B版本包含条目5、8。

源数据构造与预览

import pandas as pd
df_source=pd.DataFrame([('doc1','A',1,4),('doc1','A',2,0),('doc1','B',5,6),('doc1','B',8,6), ('doc1','C',8,4),('doc1','C',4,4), ('doc2','B',0,5),('doc2','B',1,5), ('doc3','B',5,6),('doc3','K',4,4),('doc3','K',10,4)], columns=['Doc_name','Doc_Issue','item','prop2'])
print(df_source)

输出预览:

Doc_name Doc_Issue  item  prop2
0      doc1         A     1      4
1      doc1         A     2      0
2      doc1         B     5      6
3      doc1         B     8      6
4      doc1         C     8      4
5      doc1         C     4      4
6      doc2         B     0      5
7      doc2         B     1      5
8      doc3         B     5      6
9      doc3         K     4      4
10     doc3         K    10      4

需求说明

筛选后仅保留每个文档(Doc_name)对应最新版本下的所有条目。

预期输出

df_result=pd.DataFrame([('doc1','C',8,4),('doc1','C',4,4), ('doc2','B',0,5),('doc2','B',1,5), ('doc3','K',4,4),('doc3','K',10,4)], columns=['Doc_name','Doc_Issue','item','prop2'])
print(df_result)

输出预览:

Doc_name Doc_Issue  item  prop2
0     doc1         C     8      4
1     doc1         C     4      4
2     doc2         B     0      5
3     doc2         B     1      5
4     doc3         K     4      4
5     doc3         K    10      4

实现代码

如果你的版本号Doc_Issue的字符串排序顺序与版本新旧顺序一致,可直接使用如下代码实现:

# 1. 提取每个文档的最新版本号
latest_ver = df_source.groupby('Doc_name')['Doc_Issue'].max().reset_index()
# 2. 关联原表过滤得到最新版本的全量条目
df_result = df_source.merge(latest_ver, on=['Doc_name', 'Doc_Issue'])

注意事项

如果版本号规则不是单纯的字母/数字顺序(比如存在V1.2、V1.11这类字符串排序会误判V1.11 < V1.2的格式),需要先将Doc_Issue转换为可正确排序的格式(比如拆分成版本号元组)后再取最大值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:06:02