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

如何为DataFrame补充值为0的缺失组合行

实现方案

核心思路

先提取所有维度的合法唯一组合,和原有数据做对齐操作,缺失组合的销售额自动填充为0,全程不会覆盖已有销售数据。

代码实现

首先导入依赖库:

import pandas as pd

步骤1:读取/构造原始数据

# 示例数据,可替换为你自己的数据集读取逻辑
df = pd.DataFrame({
    'account': ['哈佛', '耶鲁', '常春藤理工', '哈佛'],
    'degree_type': ['4 Year', '4 Year', '2 Year', '4 Year'],
    'discipline': ['Accounting', 'Biology', 'Biology', 'Precalculus'],
    'dollars': [1000, 2000, 500, 3000]
})

步骤2:生成全量合法组合

为了避免生成「哈佛+2 Year」这类不符合实际的无效组合,优先提取已有数据里学校和学位类型的绑定关系,再和全量学科做笛卡尔积:

# 提取所有合法的(学校, 学位类型)绑定组合
account_degree_pairs = df[['account', 'degree_type']].drop_duplicates()
# 提取所有学科的唯一值
all_disciplines = df['discipline'].unique()

# 生成全量合法的(学校, 学位类型, 学科)组合
full_combinations = account_degree_pairs.assign(tmp=1).merge(
    pd.DataFrame({'discipline': all_disciplines, 'tmp':1}),
    on='tmp'
).drop('tmp', axis=1)

如果你的业务里三个维度完全独立,不需要绑定学校和学位类型,可以直接用更简洁的写法生成全量笛卡尔积:

full_combinations = pd.MultiIndex.from_product(
    [df['account'].unique(), df['degree_type'].unique(), df['discipline'].unique()],
    names=['account', 'degree_type', 'discipline']
).to_frame(index=False)

步骤3:对齐数据补全缺失值

# 合并全量组合和原始数据,缺失的销售额字段填充为0
result = full_combinations.merge(df, on=['account', 'degree_type', 'discipline'], how='left').fillna({'dollars':0})
# 可选:把dollars字段转回整数类型
result['dollars'] = result['dollars'].astype(int)

适配性说明

你提到的3000所学校、149个学科的规模,全量组合最多只有45万条左右,完全在pandas常规处理能力范围内,不需要额外做性能优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:06:11