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

Python Pandas多列分组并以|拼接列值的实现方法咨询

Pandas多列分组后拼接其他列的实现方案

完全不需要循环遍历每一列,用Pandas内置的groupby+agg组合就能高效完成需求,代码简洁且性能更好。

示例数据

import pandas as pd

person_in_charge_raw = pd.DataFrame({'BRANCH_NO':['123','123','123','123','124','124'], 
                                     'CUSTOMER_NO':['001', '001', '001', '001','001','001'], 
                                     'DEPARTMENT_NO':['A01','B01','C01','D01', 'A01','B01'], 
                                     'STAFF_ID':['S001','S002','S003', 'S004', 'S001', 'S002']})

实现代码

# 按指定列分组,对剩余列执行字符串拼接操作
final_result = person_in_charge_raw.groupby(['BRANCH_NO', 'CUSTOMER_NO'], as_index=False).agg(
    lambda x: ' | '.join(x)
)

# 修正原示例中列名的拼写错误(DEPARMENT_NO → DEPARTMENT_NO)
final_result.columns = ['BRANCH_NO', 'CUSTOMER_NO', 'DEPARTMENT_NO', 'STAFF_ID']

代码说明

  1. groupby(['BRANCH_NO', 'CUSTOMER_NO'], as_index=False):按两列的唯一组合分组,as_index=False确保分组列直接保留为数据列,不会转为索引。
  2. .agg(lambda x: ' | '.join(x)):对每个分组下的所有非分组列,用|连接所有元素。这里的lambda x接收分组内的单列Series,join方法直接完成字符串拼接。

运行结果

执行后得到的final_result与期望结果完全一致:

BRANCH_NO CUSTOMER_NO               DEPARTMENT_NO                          STAFF_ID
0       123         001  A01 | B01 | C01 | D01  S001 | S002 | S003 | S004
1       124         001              A01 | B01               S001 | S002

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:30:50