如何为DataFrame补充proid与sku全组合行并设qty默认值为0
解决Pandas补全proid与sku全组合行的问题
这是个非常典型的Pandas数据补全场景,我来给你一个简洁高效的解决方案:
核心思路是先生成所有proid和指定sku的笛卡尔积组合,再和原DataFrame做左连接,最后把缺失的qty填充为0。
完整代码实现
import pandas as pd # 你的原始数据 rows = [["p1", "SKU1", 1], ["p1", "SKU3", 2], ["p2", "SKU1", 3]] df = pd.DataFrame(rows, columns=['proid','sku', 'qty']) skus = ["SKU1", "SKU2", "SKU3"] # 1. 提取原数据中所有唯一的proid unique_proids = df['proid'].unique() # 2. 生成proid与sku的全组合(笛卡尔积) full_combinations = pd.MultiIndex.from_product( [unique_proids, skus], names=['proid', 'sku'] ).to_frame(index=False) # 3. 左连接原数据,填充缺失的qty为0 result_df = full_combinations.merge(df, on=['proid', 'sku'], how='left') result_df['qty'] = result_df['qty'].fillna(0).astype(int) # 查看结果 print(result_df)
代码解释
- 生成全组合:用
pd.MultiIndex.from_product可以快速生成两个列表的笛卡尔积,这比手动循环高效得多,直接得到所有需要的proid-sku配对。 - 左连接合并:左连接会保留全组合的所有行,原DataFrame中存在的配对会带上原qty,不存在的则qty为
NaN。 - 填充默认值:用
fillna(0)把缺失的qty设为0,最后转成整数类型让结果更符合预期。
运行后你会得到完全符合需求的结果:
proid sku qty 0 p1 SKU1 1 1 p1 SKU2 0 2 p1 SKU3 2 3 p2 SKU1 3 4 p2 SKU2 0 5 p2 SKU3 0
内容的提问来源于stack exchange,提问作者ila
相关产品推荐
相关产品推荐

