如何合并Dataframe中同T_ID与卡号的交易,生成有效成功支付记录
处理理赔交易数据:合并支付与撤销记录并筛选有效支付记录
核心实现步骤
- 过滤所有拒付状态的交易记录(需根据业务定义拒付状态,如
REFUSED、DECLINED等) - 按
T_ID和Card Number分组,合并同一组内的PAID(正向金额)与REVERSAL(负向金额)交易,计算净额 - 合并后统一标记为
PAID状态,最终输出金额为正的有效支付记录
代码实现(Pandas)
import pandas as pd # 构造示例原始数据 data = { 'T_ID': [1, 1, 2, 3, 3], 'Card Number': [1234, 1234, 5678, 9012, 9012], 'Status': ['PAID', 'REVERSAL', 'PAID', 'REFUSED', 'PAID'], 'Amount': [100, -30, 200, -50, 150] } df = pd.DataFrame(data) # 1. 过滤拒付状态的记录(可根据实际业务调整拒付状态列表) rejected_statuses = ['REFUSED', 'DECLINED'] filtered_df = df[~df['Status'].isin(rejected_statuses)] # 2. 分组合并交易:按T_ID+卡号聚合金额,统一状态为PAID merged_df = filtered_df.groupby(['T_ID', 'Card Number'], as_index=False).agg( Amount=('Amount', 'sum'), Status=('Status', lambda _: 'PAID') ) # 3. 可选:过滤掉金额≤0的无效支付记录(根据业务需求决定是否保留) final_valid_payments = merged_df[merged_df['Amount'] > 0] # 输出结果 print(final_valid_payments)
输出结果
T_ID Card Number Amount Status 0 1 1234 70 PAID 1 2 5678 200 PAID 2 3 9012 150 PAID
关键说明
- 拒付状态列表需根据实际业务场景调整,确保所有无效拒付记录被排除
- 分组聚合时使用
sum计算净额,自动抵消PAID与REVERSAL的金额 - 可选的金额过滤步骤可剔除撤销后无实际支付的记录,进一步保证数据集有效性
内容的提问来源于stack exchange,提问作者kukroid
相关产品推荐
相关产品推荐

