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']
代码说明
groupby(['BRANCH_NO', 'CUSTOMER_NO'], as_index=False):按两列的唯一组合分组,as_index=False确保分组列直接保留为数据列,不会转为索引。.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
相关产品推荐
相关产品推荐

