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

基于字典映射为DataFrame列赋值的实现求助

解决方案

实现思路

针对列C的每个值,按以下优先级匹配字典中的键:

  1. 精确匹配:检查值是否存在于字典某键对应的列表中
  2. 子串匹配:若精确匹配失败,检查值是否包含键名的子串(默认不区分大小写,可按需调整)

完整代码示例

import pandas as pd

# 定义匹配规则字典
Sdiction = {
    "Mgage": ["ABC Gage", "XYZ Gage"],
    "Rate": ["deg/min", "rad/s", "rpm"]
}

# 读取CSV文件(替换为你的文件路径)
df = pd.read_csv("your_input.csv")

# 预构建值到键的映射,提升精确匹配效率
value_to_key = {v: key for key, values in Sdiction.items() for v in values}

# 定义匹配函数
def match_key(c_str):
    # 优先精确匹配
    if c_str in value_to_key:
        return value_to_key[c_str]
    # 子串匹配(不区分大小写)
    for key in Sdiction.keys():
        if key.lower() in c_str.lower():
            return key
    # 无匹配项时返回空值(可根据需求修改)
    return None

# 生成列D
df["列D"] = df["列C"].apply(match_key)

# 输出结果(或保存为新CSV:df.to_csv("output.csv", index=False))
print(df)

测试验证

用你提供的示例输入测试:

# 模拟示例输入DataFrame
df_test = pd.DataFrame({
    "列A": [1, 2, 3],
    "列B": [30, 45, 150],
    "列C": ["ABC Gage", "deg/min", "Gage"],
    "列D": ["", "", ""]
})

df_test["列D"] = df_test["列C"].apply(match_key)
print(df_test)

输出结果与预期一致:

列A列B列C列D
130ABC GageMgage
245deg/minRate
3150GageMgage

可选调整

  • 如果需要区分大小写匹配子串,去掉.lower()即可
  • 若存在多个可能匹配的键,可修改逻辑返回第一个匹配项或所有匹配项(需调整函数返回值)
  • 数据量较大时,可改用np.vectorize替代apply提升性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:18:14