如何用Python Pandas生成促销规划用例的推理数据集?
用Pandas生成推理数据集的实现方案
完全可以用Pandas实现这个需求,核心是通过生成笛卡尔积覆盖所有组合,具体步骤和代码如下:
步骤说明
- 生成指定日期范围内的所有日期
- 准备需要覆盖的所有Product ID列表(可从历史数据中提取唯一值)
- 生成促销类型与折扣百分比的全组合
- 对日期、Product ID、促销组合三者做笛卡尔积,得到完整的推理数据集
- 补充
Promotion flag字段(按折扣判断:折扣>0时为1,否则为0,对应促销/非促销标识)
代码实现
import pandas as pd # 1. 定义输入参数 date_start = "2023-03-17" date_end = "2023-03-27" promo_types = ["bd", "pd", "ld"] discount_percents = [0, 5, 10] # 示例Product ID列表,实际可从历史数据提取唯一值 product_ids = ["asin_001", "asin_002", "asin_003"] # 2. 生成日期序列 dates = pd.date_range(start=date_start, end=date_end, freq="D").to_frame(name="Date") # 3. 生成促销类型与折扣的全组合 promo_discount = pd.MultiIndex.from_product( [promo_types, discount_percents], names=["Promotion type", "discount percent"] ).to_frame(index=False) # 4. 生成三者的笛卡尔积 products = pd.DataFrame({"Product ID": product_ids}) df = dates.merge(products, how="cross") df = df.merge(promo_discount, how="cross") # 5. 添加Promotion flag字段 df["Promotion flag"] = df["discount percent"].apply(lambda x: 1 if x > 0 else 0) # 6. 补充current price(示例用字典匹配,实际可关联产品主数据表) price_map = {"asin_001": 99.9, "asin_002": 149.9, "asin_003": 79.9} df["current price"] = df["Product ID"].map(price_map) # 调整列顺序匹配模型输入(可选) df = df[["Date", "Product ID", "Promotion flag", "Promotion type", "discount percent", "current price"]] print(df.head())
关键提示
merge(how="cross")是Pandas 1.2.0+支持的笛卡尔积合并方式,低版本可改用pd.MultiIndex.from_product生成全索引再转成DataFrame- 若Product ID数量庞大,全组合会生成海量数据,可根据实际需求分批处理
current price需结合你的产品数据匹配,示例仅为模拟逻辑
内容的提问来源于stack exchange,提问作者mlpstack69
相关产品推荐
相关产品推荐

