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

如何根据Series标记合并DataFrame中指定型号的行

Pandas 按标记合并指定型号行并求和

原始数据

DataFrame(df1)

包含型号、部件及数量信息,定义代码:

import pandas as pd

df1 = pd.DataFrame({'model':['A','A','A','B','B','C','C','C','D','D'],
                'part':['ax','ay','az','bx','by','cx','cy','cz','dx','dy'],
                'qty':[1,2,3,2,4,2,5,3,1,2]})

数据结构如下:

modelpartqty
Aax1
Aay2
Aaz3
Bbx2
Bby4
Ccx2
Ccy5
Ccz3
Ddx1
Ddy2

Series(s1)

记录各型号是否允许合并:on表示可合并,off表示不可合并,定义代码:

s1 = pd.Series({'A':'on', 'B':'off','C':'off','D':'on'})

对应关系如下:

model合并标记
Aon
Boff
Coff
Don

需求

保留标记为off的型号行不变,将标记为on的型号行合并:同一型号的part用逗号拼接,qty列求和,预期结果:

modelpartqty
Aax,ay,az6
Bbx2
Bby4
Ccx2
Ccy5
Ccz3
Ddx,dy3

实现方案

完整代码

import pandas as pd

# 初始化原始数据
df1 = pd.DataFrame({'model':['A','A','A','B','B','C','C','C','D','D'],
                'part':['ax','ay','az','bx','by','cx','cy','cz','dx','dy'],
                'qty':[1,2,3,2,4,2,5,3,1,2]})
s1 = pd.Series({'A':'on', 'B':'off','C':'off','D':'on'}).rename('merge_flag').reset_index().rename(columns={'index':'model'})

# 给df1添加合并标记列
df_with_flag = df1.merge(s1, on='model', how='left')

# 处理不可合并的行:直接保留原结构
df_no_merge = df_with_flag[df_with_flag['merge_flag'] == 'off'].drop('merge_flag', axis=1)

# 处理可合并的行:按型号分组,拼接部件、求和数量
df_merge = df_with_flag[df_with_flag['merge_flag'] == 'on'].groupby('model').agg(
    part=('part', ','.join),
    qty=('qty', 'sum')
).reset_index()

# 合并结果并按型号排序
final_result = pd.concat([df_merge, df_no_merge], ignore_index=True).sort_values('model').reset_index(drop=True)

print(final_result)

代码说明

  1. 关联标记列:将Series s1转换为DataFrame格式,通过merge把合并标记关联到df1的每一行
  2. 拆分处理:
    • 筛选出标记为off的行,直接去除标记列后保留原始结构
    • 对标记为on的行按model分组,用','.join拼接同型号的部件名称,用sum计算数量总和
  3. 合并结果:将两组数据合并后按型号排序,得到最终符合需求的DataFrame

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:33:18