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

如何基于Version列前缀分组DataFrame并提取指定字段值

按Version前缀分组并选取特定值的解决方案

原始数据

DateVersionValueName
Jan 1123.13A
Jan 2123.235A
Jan 1223.16B
Jan 2623.237B

需求说明

按Version列小数点前的前缀分组:

  • Value取分组内Version字符串长度最长的行的Value值
  • Name取分组内任意一行的Name值

实现代码

import pandas as pd

# 构建示例DataFrame
df = pd.DataFrame({
    'Date': ['Jan 1', 'Jan 2', 'Jan 1', 'Jan 2'],
    'Version': ['123.1', '123.23', '223.1', '623.23'],
    'Value': [3, 5, 6, 7],
    'Name': ['A', 'A', 'B', 'B']
})

# 提取Version前缀(小数点前部分)
df['Version Prefix'] = df['Version'].str.split('.').str[0]

# 计算每个Version的字符串长度
df['Version Length'] = df['Version'].str.len()

# 按前缀分组,取Version长度最长的行(先降序排序,再取每组第一行)
result = df.sort_values('Version Length', ascending=False)\
           .groupby('Version Prefix')\
           .first()\
           .reset_index()

# 保留需要的列
result = result[['Version Prefix', 'Value', 'Name']]

print(result)

输出结果

Version PrefixValueName
1235A
2236B
6237B

代码说明

  1. 提取前缀:通过str.split('.').str[0]将Version字符串按小数点拆分,取第一部分作为分组依据。
  2. 计算长度:用str.len()获取每个Version的字符串长度,用于筛选最长的条目。
  3. 分组筛选:先按Version长度降序排序,确保每组中最长的条目排在首位;再按前缀分组,用first()获取每组的第一条数据,即对应最长Version的行。
  4. 整理结果:只保留需求指定的三列,得到最终输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:30