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

如何基于两个已有Pandas DataFrame生成符合特定条件的新DataFrame

解决方法:基于Pandas生成门店-区域组合的扩展DataFrame

这个需求在零售数据整合里挺常见的,我之前做类似业务时也碰到过。核心思路是把All Zones的行单独拆分出来做全量扩展,再和特定区域的匹配结果合并,用Pandas的内置方法就能轻松实现。下面一步步来:

1. 先明确数据结构(示例)

先假设你的DataFrame结构如下(如果实际列名/结构不同,调整对应字段即可):

import pandas as pd

# DF_1:存储SKU、价格、区域信息
DF_1 = pd.DataFrame({
    'SKU': ['A100', 'B200', 'C300'],
    'Price': [10.99, 24.99, 15.50],
    'Zone': ['North', 'All Zones', 'South']
})

# DF_2:存储门店ID、区域信息
DF_2 = pd.DataFrame({
    'Store_ID': ['S01', 'S02', 'S03', 'S04'],
    'Zone': ['North', 'North', 'South', 'East']
})

2. 拆分并处理两类数据

我们把DF_1分成**"All Zones"行和特定区域行**分别处理:

  • 对于All Zones的行:需要和DF_2的所有门店-区域组合做全匹配(笛卡尔积)
  • 对于特定区域的行:只和DF_2中对应区域的门店匹配

代码实现

# 1. 拆分DF_1为两个子集
df_all_zones = DF_1[DF_1['Zone'] == 'All Zones'].drop(columns='Zone')  # 去掉原Zone列,准备替换为DF_2的所有Zone
df_specific_zones = DF_1[DF_1['Zone'] != 'All Zones']

# 2. 处理"All Zones"的行:生成所有门店-区域组合
df_all_expanded = df_all_zones.merge(DF_2, how='cross')  # cross连接实现笛卡尔积

# 3. 处理特定区域的行:按Zone匹配门店
df_specific_matched = df_specific_zones.merge(DF_2, on='Zone', how='inner')

# 4. 合并两个结果,得到最终的DF_3
DF_3 = pd.concat([df_all_expanded, df_specific_matched], ignore_index=True)

3. 结果说明

运行后DF_3会包含:

  • SKU B200(原Zone为All Zones)和DF_2中4个门店的所有组合
  • SKU A100(原Zone为North)和DF_2中North区域的2个门店组合
  • SKU C300(原Zone为South)和DF_2中South区域的1个门店组合

注意事项

  • 如果DF_1中有多个All Zones的SKU,merge(how='cross')会自动为每个SKU生成所有门店组合
  • 如果需要保留DF_1中没有匹配到门店的区域行,可以把how='inner'改成how='left'
  • 如果DF_2中有重复的门店-区域记录,结果中也会保留这些重复项(符合业务逻辑的话无需额外处理)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:47:41