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

如何高效筛选Pandas DataFrame中id前缀唯一且后缀字母最大的行?

高效实现方法

针对你的需求,推荐利用Pandas的分组+矢量化操作来实现,这是处理这类分组筛选场景的高效方案,避免了循环遍历的性能损耗,适合大数据量场景。

步骤说明:

  • 提取前缀分组键:从id列中拆分出xxxxxx-xxx-部分作为分组依据,通过拆分最后一个-来获取前缀,比固定切片更灵活(即使格式有微小变化也能适配)。
  • 分组筛选后缀最大的行:按前缀分组后,利用字符串的ASCII码特性(大写字母Z的ASCII值最大),直接取每个组中id值最大的行——因为id的后缀是字母,整个id的最大值对应的就是后缀字母排序最后一位的行。
  • 提取目标行:通过分组得到的最大行索引,从原DataFrame中筛选出结果。

代码实现:

首先构造示例DataFrame:

import pandas as pd

data = {
    'id': ['095082-000-A', '095772-101-A', '095082-000-B', '095772-101-E', 
           '095772-101-Z', '095772-101-D', '095082-000-F', '015082-001-A'],
    'user name': ['name1', 'name2', 'name3', 'name4', 'name5', 'name6', 'name7', 'name8']
}
df = pd.DataFrame(data)

然后执行筛选:

# 提取前缀:拆分最后一个'-',取前面的部分
df['prefix'] = df['id'].str.rsplit('-', n=1).str[0]

# 按前缀分组,获取每个组中id最大的行的索引
max_idx = df.groupby('prefix')['id'].idxmax()

# 根据索引提取结果
result = df.loc[max_idx].drop('prefix', axis=1)

print(result)

输出结果:

id user name
4  095772-101-Z      name5
6  095082-000-F      name7
7  015082-001-A      name8

性能说明:

这个方案全程使用Pandas的内置矢量化函数,groupby和idxmax都是经过优化的底层实现,比Python层面的循环快几个数量级,即使处理十万级以上的数据也能快速完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 17:15:46