@qiao39gs
2025-08-07T07:26:31.000000Z
字数 1718
阅读 1
将来自两个不同数据源(a.csv 和 b.csv)的数据进行关联,核心目标是将团体合同号(grpcontno)准确地分配给符合条件的保单记录。由于资源(grpcontno 和 batchno)的唯一性限制,需要根据一套优先级规则来进行分配,并最终生成一份包含所有保单记录(无论是否成功分配)的完整报告。
整个流程从两个 CSV 文件开始:
文件一:a.csv (团体合同信息)
grpcontno 及关联匹配所需的主数据。grpcontno, riskcode, transdate, managecom, agentcom, agentcode, finmoney。grpcontno 的出现顺序具有业务意义,将作为分配时的优先依据。文件二:b.csv (保单批次信息)
grpcontno 的所有保单记录。保单号, batchno, syndate, valdate, riskcode, managecom, agentcom, agentcode, chnltype, salechnl, subchnl, polmoney。处理过程需严格按照以下步骤和规则执行:
数据关联 (Left Merge)
b.csv 的所有记录为基础(左表),与 a.csv(右表)进行左连接匹配。b.riskcode = a.riskcodeb.polmoney = a.finmoneyb.managecom = a.managecomb.agentcom = a.agentcomb.agentcode = a.agentcodeb.syndate = a.transdateb.csv 的某一行可能会因匹配到 a.csv 的多行而出现重复。分配与去重 (核心算法)
b.csv 的原始行顺序进行遍历和决策。grpcontno 在整个流程中只能被成功分配一次。batchno 在整个流程中也只能被成功分配一次。b.csv 的第一行对应的候选匹配开始。 grpcontno(这些 grpcontno 的相对顺序由它们在 a.csv 中的原始顺序决定)。 grpcontno,选择第一个尚未被使用的 grpcontno。 grpcontno,并且当前行的 batchno 也尚未被使用,则视为一次成功分配。 grpcontno 和这个 batchno 标记为“已使用”。 b.csv 的原始顺序处理下一行。 grpcontno 都已被占用,或者该行的 batchno 已被占用,则该行的所有候选匹配都作废,无法成功分配。result_ordered.csv 的单一 CSV 文件。UTF-8-SIG,以确保在 Excel 中打开时中文不会乱码。内容: 文件必须包含 b.csv 的所有原始记录,并根据分配结果呈现为两种状态:
b.csv 的所有字段。grpcontno 被填入 grpcontno 列。备注 列为空。b.csv 的所有字段。grpcontno 列为空 (NaN)。备注 列的值必须为 "无可用grpcontno"。字段顺序: 输出的 CSV 文件列顺序必须严格按照以下规定排列:
保单号, 备注, grpcontno, riskcode, transdate, managecom, agentcom, agentcode, finmoney, batchno, syndate, valdate, chnltype, salechnl, subchnl, polmoney
transdate 和 finmoney 来自 a.csv,其余字段主要来自 b.csv。如果某行未成功匹配,则 transdate 和 finmoney 列也为空。