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

Pandas实现含分类非数值值的类VLOOKUP功能优化咨询

优化方案

核心思路是用pd.melt()将表2的宽表结构转为长表,一次性完成ProductID的统一规整,无需手动拆分每一个Site列,扩展性和效率都更高。

完整优化代码

import pandas as pd

# 读取数据,统一指定ProductID为字符串类型,避免数字/混合格式匹配问题
sales_df = pd.read_csv("table1.csv", dtype={"ProductID": str})
product_df = pd.read_csv("table2.csv", dtype=str)

# 宽表转长表,一步完成所有Site列的合并,保留站点维度方便后续分析
product_long = product_df.melt(
    id_vars="Brand",
    # 自动识别所有站点列,新增站点无需修改代码
    value_vars=[col for col in product_df.columns if col.startswith("Site")],
    var_name="Site",
    value_name="ProductID"
).query("ProductID != 'N/A'")  # 直接过滤无匹配的N/A记录

# 关联销售额+按品牌汇总,直接得到目标结果
result = (
    sales_df.merge(product_long, on="ProductID", how="inner")
    .groupby("Brand", as_index=False)["Sales"]
    .sum()
)

扩展功能示例(站点透视分析)

因为转换过程保留了站点字段,后续需要做站点维度的分析无需重新处理数据,直接生成透视表即可:

# 按品牌+站点统计销售额的透视表
site_pivot = (
    sales_df.merge(product_long, on="ProductID", how="inner")
    .pivot_table(index="Brand", columns="Site", values="Sales", aggfunc="sum", fill_value=0)
)

优化点说明

  • 解决格式匹配问题:读取数据时统一指定字符串类型,彻底避免纯数字、字母数字混合值的匹配异常,兼容所有ID格式。
  • 扩展性极强:后续如果新增Site4/Site5等列无需修改逻辑,代码会自动识别所有以Site开头的列处理。
  • 保留全维度信息:转换后的长表保留了Site字段,后续需要按站点、按品牌+站点做透视分析都可以直接实现,不会丢失维度信息。
  • 代码行数减少60%以上,全程无冗余的拆分、重命名、拼接操作,计算效率更高,适合大数据量场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:36:02