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

如何在Pandas中高效为DataFrame添加/替换来自另一DataFrame的数值评分

优化信用评级转数值评分的方法

别再用多次pd.merge了,直接用映射字典+map方法更简便高效,代码清晰还能避免中间数据混乱。

具体实现步骤:

  1. 重构信用评级的映射关系,直接生成各评级机构到分数的字典
  2. 用map方法一键转换原DataFrame中的评级列,生成对应的分数列

完整代码示例

import pandas as pd

df = pd.DataFrame( { 'name' : ['ABC'],
                    'Moodys' :['Aa3'],
                    'SNP' : ['AA'],
                    'Fitch' : ['A']})

# 定义评级与分数的对应关系
credit_score_mapping = [
    (10, ['AAA', 'Aaa']),
    (9, ['AA+', 'Aa1']),
    (8, ['AA', 'Aa2']),
    (7, ['AA-', 'Aa3']),
    (6, ['A+', 'A1']),
    (5, ['A', 'A2']),
    (4, ['A-', 'A3']),
    (3, ['BBB+', 'Baa1']),
    (2, ['BBB', 'Baa2']),
    (1, ['BBB-', 'Baa3']),
    (-1, ['BB+', 'Ba1']),
    (-2, ['BB', 'Ba2']),
    (-3, ['BB-', 'Ba3']),
    (-4, ['B+', 'B1']),
    (-5, ['B', 'B2']),
    (-6, ['B-', 'B3'])
]

# 生成各机构的评分映射字典
snp_fitch_map = {}
moodys_map = {}
for score, ratings in credit_score_mapping:
    snp_fitch_map[ratings[0]] = score  # SNP和Fitch的评级格式一致
    moodys_map[ratings[1]] = score     # Moodys是单独的评级格式

# 直接在原DataFrame添加评分列
df['Moodys_score'] = df['Moodys'].map(moodys_map)
df['SNP_score'] = df['SNP'].map(snp_fitch_map)
df['Fitch_score'] = df['Fitch'].map(snp_fitch_map)

print(df)

输出结果

name Moodys SNP Fitch  Moodys_score  SNP_score  Fitch_score
0  ABC    Aa3  AA     A             7          8            5

为什么这个方法更好?

  • 代码简洁:不需要生成中间DataFrame,也不会出现Fitch_x这类混乱的列名
  • 性能更高:map是Pandas的向量化操作,比多次merge的效率高得多,数据量越大优势越明显
  • 逻辑清晰:直接构建映射关系,一眼就能看懂各评级对应的分数,后续维护也方便

如果担心有未匹配的评级(比如出现不在映射里的取值),可以用fillna处理缺失值,或者换成replace方法,效果一致:

df['Moodys_score'] = df['Moodys'].replace(moodys_map).fillna(-99)  # 用-99标记未匹配的评级

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:03:14