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

基于ID匹配用priceMapping填充data缺失Price值的Pandas技术问询

嗨,这事儿用Pandas分分钟搞定,我给你两种实用的方案,你可以根据自己的习惯选:

准备工作

首先确保你已经导入了Pandas库:

import pandas as pd

先把你的两个DataFrame定义出来(方便你直接复制测试):

# 构建data DataFrame
data = pd.DataFrame({
    "Global id": ["AR.1852218.1", "AR.1852223.1", "AR.1852251.1", "AR.1852254.1", "AR.1852257.1", "AR.1852386.1", "AR.1852549.1"],
    "Price": ["", "0,6", "0,56", "", "0,25", "0,33", ""]
})

# 构建priceMapping DataFrame
priceMapping = pd.DataFrame({
    "G.ID": ["AR.1852218.1", "AR.1852254.1", "AR.1852549.1"],
    "Price": ["0,1", "0,25", "0,33"]
})

方案一:用map()快速填充(推荐)

这种方法简洁高效,适合一对一匹配的场景:

# 把priceMapping转成字典,键是G.ID,值是对应的Price
price_lookup = priceMapping.set_index("G.ID")["Price"].to_dict()

# 先把data里的空字符串转成Pandas标准缺失值,再用字典映射填充
data["Price"] = data["Price"].replace("", pd.NA)
data["Price"] = data["Price"].fillna(data["Global id"].map(price_lookup))

方案二:用merge()合并填充(更灵活)

如果之后需要扩展匹配规则(比如多字段匹配),用合并的方式更灵活:

# 左合并两个DataFrame,保留data的所有行,给映射表的Price加个后缀区分
merged_data = data.merge(priceMapping, left_on="Global id", right_on="G.ID", how="left", suffixes=("", "_from_map"))

# 用映射表的Price填充原Price的缺失值
merged_data["Price"] = merged_data["Price"].replace("", pd.NA)
merged_data["Price"] = merged_data["Price"].fillna(merged_data["Price_from_map"])

# 保留原data的列结构
data = merged_data[["Global id", "Price"]]
验证结果

执行完上面的代码后,打印data就能看到填充后的结果:

print(data)

输出如下:

Global id  Price
0  AR.1852218.1   0,1
1  AR.1852223.1   0,6
2  AR.1852251.1  0,56
3  AR.1852254.1  0,25
4  AR.1852257.1  0,25
5  AR.1852386.1  0,33
6  AR.1852549.1  0,33
小提示

如果之后需要对Price做数值计算,记得把逗号分隔的格式转成点分隔的浮点型:

data["Price"] = data["Price"].str.replace(",", ".").astype(float)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 18:48:00