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

基于Pandas实现跨Excel文件按Titel匹配填充历史价格数据

解决方案:Excel文件按Titel匹配填充历史价格数据
  • 先处理历史数据File B:因为要求重复Titel取首个匹配项,所以先对File B去重,只保留每个Titel第一次出现的记录,同时只加载需要的列(Titel、Mean、High、Low),减少内存占用。
  • 再将处理后的File B与当前产品列表File A做左连接,确保File A的所有行都保留,无匹配项的字段用"not available"填充。

具体代码实现

import pandas as pd

# 读取File B,仅加载需要的列,节省内存
df_b = pd.read_excel("File B.xlsx", usecols=["Titel", "Mean", "High", "Low"])
# 去重:保留每个Titel的第一条记录
df_b_unique = df_b.drop_duplicates(subset="Titel", keep="first")

# 读取File A
df_a = pd.read_excel("File A.xlsx")

# 左连接,以Titel为匹配键
df_c = pd.merge(df_a, df_b_unique, on="Titel", how="left")

# 填充缺失值为"not available"
df_c[["Mean", "High", "Low"]] = df_c[["Mean", "High", "Low"]].fillna("not available")

# 保存结果到File C
df_c.to_excel("File C.xlsx", index=False)

之前方法失败的常见原因

  • 使用merge时未先对File B去重:会导致匹配到多个重复Titel,结果行数远超File A的5万行,出现不符合预期的情况;
  • 使用map时未处理重复索引:如果直接用df_b.set_index("Titel")["Mean"],当Titel重复时,map会取到最后一个匹配项,不符合"取首个"的要求;
  • Titel格式不一致:如果Excel里的Titel存在首尾空格、大小写差异,会导致匹配失败,可提前统一格式:
# 可选:统一Titel格式,去除首尾空格、转小写
df_a["Titel"] = df_a["Titel"].str.strip().str.lower()
df_b["Titel"] = df_b["Titel"].str.strip().str.lower()

大文件内存优化建议

如果File B加载内存压力大,可分块读取并去重:

# 分块读取File B并去重
chunk_size = 100000
df_b_unique = pd.DataFrame()
for chunk in pd.read_excel("File B.xlsx", usecols=["Titel", "Mean", "High", "Low"], chunksize=chunk_size):
    chunk_unique = chunk.drop_duplicates(subset="Titel", keep="first")
    # 合并时再次去重,避免不同块出现重复Titel
    df_b_unique = pd.concat([df_b_unique, chunk_unique]).drop_duplicates(subset="Titel", keep="first")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:45:37