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

如何匹配DataFrame列值末位字符对应两类字典完成数值格式转换

实现代码(小数据量简洁版)

import pandas as pd

# 定义映射字典
PositiveKey = {"{":"0", "A":"1", "B":"2"} 
NegativeKey = {"}":"0", "J":"1", "K":"2"}

# 示例DataFrame,替换为你实际的df即可
df = pd.DataFrame({
    "Column 1": ["000000002758A", "000000326588B", "000000000567J"]
})

def convert_val(s):
    last_char = s[-1]
    num_prefix = s[:-1].lstrip("0")
    if last_char in PositiveKey:
        return int(num_prefix + PositiveKey[last_char]) / 100
    elif last_char in NegativeKey:
        return -int(num_prefix + NegativeKey[last_char]) / 100
    # 异常场景可自行补充返回逻辑
    return 0

df["Column 1"] = df["Column 1"].apply(convert_val)

大数据量性能优化版(向量化操作)

如果处理的数据量超过10万行,建议用向量化操作代替行遍历的apply,执行效率更高:

# 构造统一映射表
full_map = {}
for k, v in PositiveKey.items():
    full_map[k] = (1, v)
for k, v in NegativeKey.items():
    full_map[k] = (-1, v)

# 拆分字符、映射转换
df["last"] = df["Column 1"].str[-1]
df["prefix"] = df["Column 1"].str[:-1].str.lstrip("0")
df[["sign", "suffix"]] = df["last"].map(full_map).tolist()

# 计算最终值
df["Column 1"] = df.apply(lambda x: int(x["prefix"] + x["suffix"]) * x["sign"] / 100, axis=1)
df = df.drop(columns=["last", "prefix", "sign", "suffix"])

执行后得到的df就是你需要的目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:06:04