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

如何基于嵌套字典结合国家代码替换DataFrame字符串

解决方案:基于国家匹配的后缀替换

我来帮你修正这个问题,你的核心需求是仅当DataFrame的Reg Country Code匹配字典外层key时,才对Name列结尾的对应后缀进行替换,原来的代码因为循环逻辑错误和效率问题没有达到预期,下面是适配大字典和大数据量的优化方案:

1. 完整可运行代码

import pandas as pd

# 你的嵌套规则字典
country_dict = {
    'IND': {' PVT. LTD.': ' Pvt. Ltd.', ' pvt. Ltd': ' Pvt. Ltd.', ' PVT LTD': ' Pvt. Ltd.', ' L.L.P.': ' LLP', ' LTD.': ' Ltd.', ' LLP.': ' LLP', ' ltd': ' Ltd.', ' llp': ' LLP'},
    'GBR': {' P.L.C.': ' PLC', ' C.I.C.': ' CIC', ' p.l.c': ' PLC', ' c.i.c': ' CIC', ' s.e.': ' SE', ' PLC.': ' PLC'},
    'USA': {' LTD. CO.': ' Ltd. Co.', ' L.L.L.P.': ' LLLP', ' ltd. Co': ' Ltd. Co.', ' l.l.l.p': ' LLLP', ' L.L.P.': ' LLP', ' L.L.C.': ' LLC', ' l.l.p': ' LLP', ' l.l.c': ' LLC'}
}

# 示例DataFrame
data = {
    'Name': ['NexPoint LTD. CO.', 'Silverplay P.L.C.', 'ALLOYS PVT. LTD.', 'GALLIUM ltd.', 'ELLIOTT s.e.'],
    'Reg Country Code': ['USA', 'GBR', 'IND', 'IND', 'GBR']
}
df = pd.DataFrame(data)

# 定义单个名称的处理函数:按规则替换结尾后缀
def process_single_name(name, country_rules):
    # 按后缀长度倒序排序,避免短后缀优先匹配(比如先匹配"LTD. CO."而不是"CO.")
    sorted_rules = sorted(country_rules.items(), key=lambda x: -len(x[0]))
    for suffix, replacement in sorted_rules:
        if name.endswith(suffix):
            # 替换结尾的后缀部分
            return name[:-len(suffix)] + replacement
    # 无匹配后缀则返回原名称
    return name

# 按国家代码分组,应用对应规则
df['Name'] = df.groupby('Reg Country Code')['Name'].transform(
    lambda group: group.apply(lambda x: process_single_name(x, country_dict.get(group.name, {})))
)

print(df)

2. 代码运行结果

Name Reg Country Code
0  NexPoint Ltd. Co.              USA
1      Silverplay PLC              GBR
2   ALLOYS Pvt. Ltd.              IND
3      GALLIUM Ltd.              IND
4        ELLIOTT SE              GBR

3. 原代码问题分析

  • 循环逻辑错误:你遍历country_dict.items()时,k1是(key-value)元组而非国家代码字符串,导致df.loc[i, 'Reg Country Code'] == k1永远不成立,规则根本没触发。
  • 效率低下:逐行循环for i in range(len(df))的方式在数据量大时会非常慢,不适合生产环境。
  • 替换不精准:使用re.sub会替换整个字符串中的匹配内容,而非仅结尾的后缀,不符合你的需求。

4. 优化方案优势

  • 精准匹配国家:通过groupby('Reg Country Code')分组,确保每个国家的行只应用对应规则,完全满足你的匹配条件。
  • 高效处理:利用Pandas的向量化/分组操作替代逐行循环,处理大字典和大数据量时性能提升明显。
  • 避免错误替换:对规则按后缀长度倒序排序,优先匹配长后缀,防止短后缀提前匹配导致的错误(比如避免把"LTD. CO."误拆成"LTD."替换)。
  • 精准替换结尾:使用endswith判断后缀,再通过字符串切片替换,比正则表达式更高效且精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:47:33