You need to enable JavaScript to run this app. 使用numpy/pandas如何快速将相同唯一标识的多行合并为单行?
优惠活动
大模型
产品
解决方案
定价
更多

使用numpy/pandas如何快速将相同唯一标识的多行合并为单行?

优化方案

你原有代码运行慢的核心原因是使用了逐行遍历的循环逻辑,还存在链式索引赋值的问题,完全没有利用pandas的向量化运算特性,因此数据量稍大就会非常慢。
可以用分组+宽表转换的方案实现需求,性能提升可达数百倍,3万行数据可以在毫秒级完成:

  1. 给每个贷款ID下的借款人生成排序编号,主借款人标记为main,共同借款人按顺序生成1、2、3……的序号
import pandas as pd

# 排序保证同贷款ID的记录在一起,且主借款人排在每组最前面
co_ap.sort_values(by=['Loan No.', 'Borroer'], ascending=[True, False], inplace=True)

# 按贷款ID分组,生成组内借款人序号
co_ap['borrower_rank'] = co_ap.groupby('Loan No.').cumcount().map(lambda x: 'main' if x == 0 else f'coap_{x}')
  1. 通过透视表将长表转成宽表,每个贷款ID仅保留一行
# 生成透视表
result = co_ap.pivot(index='Loan No.', columns='borrower_rank', values='Age').reset_index()

# 调整列名符合你的需求
result.columns.name = None
col_rename_map = {'main': 'ST_Age_main'}
max_coap_count = co_ap['borrower_rank'].nunique() - 1
for i in range(1, max_coap_count + 1):
    col_rename_map[f'coap_{i}'] = f'ST_Age_coap_{i}'
result = result.rename(columns=col_rename_map)

如果需要保留每个贷款ID对应的其他固定字段(比如贷款金额、申请时间等全局唯一字段),只需要将这些字段也添加到pivot的index参数中即可:

# 示例:保留贷款金额、申请时间两个字段
result = co_ap.pivot(index=['Loan No.', 'loan_amount', 'apply_date'], columns='borrower_rank', values='Age').reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 16:06:04