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

基于多条件VLOOKUP在另一变量中生成新变量的实现方法

解决方案:基于SKU和Subcategory生成匹配价格列

我来帮你落地这个需求,下面分Python Pandas和SQL两种常用数据处理场景给出具体解法,完全匹配你描述的逻辑:

核心逻辑梳理

  • 为sku中的每个唯一值创建一个新变量(列),列名格式参考eta{subc},{sku}(比如你提到的eta2,3就代表sku#3、subc2)
  • 对每一行观测值,只要它的subc和新变量对应sku的subc一致,就填充该行在门店/周维度下的自有产品价格own_price;不匹配则留空

解法1:Python Pandas实现

假设你的数据集是Pandas DataFrame,包含sku、subc、store、week、own_price这些核心列,代码如下:

import pandas as pd

# 1. 构建「唯一sku -> 对应subc」的映射字典,避免重复计算
sku_subc_mapping = df.drop_duplicates(subset='sku').set_index('sku')['subc'].to_dict()

# 2. 遍历每个唯一sku,生成对应新列并填充价格
for target_sku, target_subc in sku_subc_mapping.items():
    # 按照规则生成列名:eta{subc},{sku}
    new_col_name = f'eta{target_subc},{target_sku}'
    # 条件判断:当前行subc等于目标sku的subc时,填充own_price,否则为缺失值
    df[new_col_name] = df.apply(
        lambda row: row['own_price'] if row['subc'] == target_subc else pd.NA,
        axis=1
    )

代码说明

  • 第一步先对sku去重,确保每个sku只绑定一个subcategory(如果存在一个sku对应多个subc的异常情况,建议先清洗数据)
  • 遍历过程中,每个新列会自动匹配所有同subc的观测值,填充对应的own_price——就像你例子里的eta2,3列,第3-5行因为subc都是2,所以都会填充各自的own_price(如果门店/周维度下价格一致,取值自然相同)

解法2:SQL实现

如果数据存储在数据库中,这里以标准SQL为例,用CASE WHEN实现匹配逻辑(批量生成所有sku列需要结合数据库特性,先给出单sku示例,多sku可扩展为动态SQL):

-- 先获取所有唯一sku和对应的subcategory
WITH unique_sku_subc AS (
    SELECT DISTINCT sku, subc
    FROM product_data
)

-- 主查询:生成目标列并填充价格
SELECT
    pd.*,
    -- 生成eta2,3列(对应sku=3、subc=2)
    CASE WHEN pd.subc = us.subc THEN pd.own_price ELSE NULL END AS `eta2,3`
    -- 若要生成更多sku的列,复制上面的CASE WHEN并替换us.sku的取值即可
FROM product_data pd
-- 关联唯一sku-subc映射表
CROSS JOIN unique_sku_subc us
WHERE us.sku = 3 -- 指定要生成列的sku
GROUP BY pd.sku, pd.subc, pd.store, pd.week, pd.own_price, us.sku, us.subc;

扩展说明

如果需要批量生成所有sku对应的列,可以用动态SQL拼接CASE WHEN语句:比如MySQL用GROUP_CONCAT、PostgreSQL用STRING_AGG生成拼接字符串,再执行动态SQL,具体语法可根据你使用的数据库调整。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:25:26