Python Pandas数据处理:替换字符值后按多列条件计算MSD(逾期月数)
实现MSD字段计算的解决方案
你之前编写的数值替换代码逻辑正确,替换完成后可按以下步骤计算MSD字段:
完整可运行代码
# 执行你已有的数值转换逻辑 df = df.replace({'C': 0, 'F': 0, 'Z': 0,' ':0}).astype(int) # 1. 按1个月前到12个月前的顺序提取目标逾期列 dlq_cols = sorted(df.filter(like='CRDACCT_DLQ_CYC').columns, key=lambda col: int(col.split('_')[4])) # 2. 构造值大于1的布尔掩码矩阵 mask = df[dlq_cols] > 1 # 3. 逐行取第一个满足>1的列对应的月份数,所有列都不满足则取0 df['MSD'] = mask.idxmax(axis=1).where(mask.any(axis=1), 0).apply( lambda x: int(x.split('_')[4]) if x != 0 else 0 )
逻辑说明
- 第一步先对12个逾期列按月份从小到大排序,保证检查顺序符合你要求的从近到远(1个月前到12个月前)
- 第二步的布尔矩阵标记了所有值大于1的单元格位置
- 第三步使用
idxmax(axis=1)找到每行第一个出现True的列名,如果该行全为False(没有值>1的列)则直接赋值为0,最终从列名中提取对应的月份数字作为MSD值
结果验证
和你给出的示例完全匹配:
- 索引0行:第一个列值为3>1,MSD返回1
- 索引2行:第一个列值为0,第二个列值为3>1,MSD返回2
内容的提问来源于stack exchange,提问作者Anwar San
相关产品推荐
相关产品推荐

