You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:03