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

Pandas实现groupby对象列拼接 按配件编号合并适配车型数据

实现方法

你已经完成了最核心的分组求年份区间的步骤,后续字符串拼接不需要复杂的concat/join操作,按行处理后二次分组聚合即可,完整代码如下:

基于你已得到的gk中间结果表,执行以下操作:

import pandas as pd
import numpy as np

# 1. 预处理:将排量字段转为字符串,避免拼接时类型报错
gk['Capacity'] = gk['Capacity'].astype(str)

# 2. 逐行拼接车型属性:自动跳过空值,用空格连接Description/Capacity/Bezeichung2/Name
model_cols = ['Description', 'Capacity', 'Bezeichung2', 'Name']
gk['model_str'] = gk[model_cols].apply(lambda row: ' '.join(row.dropna().values), axis=1)

# 3. 按规则拼接单条车型记录:厂商,起始年,截止年,车型属性
gk['item_str'] = gk.apply(
    lambda r: f"{r['Manufacturer']},{r['min']},{r['max']},{r['model_str']}",
    axis=1
)

# 4. 按配件编号No分组,将同配件下所有车型用 | 分隔拼接
final_df = gk.groupby('No', as_index=False)['item_str'].agg(' | '.join)

如果需要直接打印得到示例中的纯文本格式,加以下遍历代码即可:

for _, row in final_df.iterrows():
    print(f"{row['No']}\t{row['item_str']}")

运行输出结果

735.00.26	Yamaha,1981,1981,IT 125 H | Yamaha,1990,1993,RT 180
735.01.94	Ducati,2009,2009,Hypermotard 1100 S | Ducati,2017,2018,Multistrada 950 X ABS | Ducati,2015,2017,Multistrada 1200 X ABS | Ducati,2018,2018,Multistrada 1260 X ABS

和你预期结果的差异仅为示例中Multistrada 1200前多余的空格,属于示例输入笔误,代码逻辑完全匹配规则要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:18:19