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

Python实现按VIN列识别C≤10条件的新软件问题求助

识别Pandas DataFrame中同一VIN下的新软件版本

解决方案思路

核心逻辑是:按VIN分组后,提取软件版本后缀判断更新顺序,再结合C列≤10的条件标记新软件。以下是两种高效实现方式,避免apply可能的性能问题。


实现代码(简洁版)

先假设你的输入DataFrame结构如下:

import pandas as pd

# 示例输入数据
data = {
    'VIN': ['VIN1', 'VIN1', 'VIN1', 'VIN2', 'VIN2'],
    'SOFTWARE': ['c5D2-14N450-CBQ', 'c5D2-14N450-CBR', 'c5D2-14N450-CBS', 'X1Y2-98Z76-AA', 'X1Y2-98Z76-AB'],
    'C': [5, 8, 12, 9, 15]
}
df = pd.DataFrame(data)

执行以下代码完成标记:

# 1. 提取软件版本后缀(最后一段字符)
df['VERSION'] = df['SOFTWARE'].str.split('-').str[-1]

# 2. 按VIN分组,给每个版本排序排名(升序:1=最早版本,数值越大版本越新)
df['VERSION_RANK'] = df.groupby('VIN')['VERSION'].rank(method='dense', ascending=True)

# 3. 标记新软件:版本排名>1(更新版本)且C列≤10
df['IS_NEW_SOFTWARE'] = (df['VERSION_RANK'] > 1) & (df['C'] <= 10)

# 清理中间列(可选)
df = df.drop(['VERSION', 'VERSION_RANK'], axis=1)

期望输出

运行后得到的结果:

VIN           SOFTWARE   C  IS_NEW_SOFTWARE
0  VIN1  c5D2-14N450-CBQ    5           False
1  VIN1  c5D2-14N450-CBR    8            True
2  VIN1  c5D2-14N450-CBS   12           False
3  VIN2    X1Y2-98Z76-AA    9           False
4  VIN2    X1Y2-98Z76-AB   15           False

代码解释

  1. 提取版本后缀:通过str.split('-').str[-1]拆分软件字符串,取最后一段作为版本标识(比如CBQ、CBR)。
  2. 版本排名:用groupby+rank给每个VIN下的版本排序,method='dense'确保相同版本不会跳号,ascending=True让最早版本排名为1。
  3. 条件判断:只有同时满足「版本是更新后的(排名>1)」和「C列≤10」的行,才标记为新软件。

备选方案(使用apply)

如果偏好apply方式,也可以用分组自定义函数实现:

def mark_new_software(group):
    # 按版本排序,确定更新顺序
    group_sorted = group.sort_values('SOFTWARE').copy()
    # 标记除第一个版本外的更新版本
    group_sorted['IS_NEW_SOFTWARE'] = group_sorted.index != group_sorted.index[0]
    # 过滤C列>10的情况
    group_sorted.loc[group_sorted['C'] > 10, 'IS_NEW_SOFTWARE'] = False
    return group_sorted

# 分组应用函数并重置索引
df = df.groupby('VIN').apply(mark_new_software).reset_index(drop=True)

注意:apply在大数据量下性能不如rank+transform的方式,优先推荐第一种方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:01:28