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

如何使用pandas填补DataFrame缺口,补全各日期对应的b1/c1/d1行并将缺失col3填为0

实现方案

整套方案基于pandas原生向量化操作实现,无逐行循环逻辑,可适配十万/百万行级的大规模数据处理场景。

第一步:清洗原始脏数据

先过滤无效空行、修正列数据类型,避免空字符串残留干扰后续关联逻辑:

# 过滤掉col1为空的无效行(兼容带前后空格的空值场景)
df = df[df['col1'].astype(str).str.strip() != '']

# 修正列数据类型
df['col1'] = df['col1'].astype(int)  # 若col1为日期格式,可替换为 pd.to_datetime(df['col1'])
df['col3'] = pd.to_numeric(df['col3'], errors='coerce').fillna(0).astype(int)

# (可选)若存在同一(col1, col2)重复行,先聚合避免关联后行数膨胀
df = df.groupby(['col1', 'col2'], as_index=False)['col3'].sum()

第二步:生成完整结构基准表

基于col1的所有唯一值、col2的所有唯一值生成全量组合,确保每个日期对应所有类别都有固定行:

# 提取唯一值(若需固定类别顺序,可手动指定列表,如 unique_col2 = ['b1', 'c1', 'd1'])
unique_col1 = df['col1'].unique()
unique_col2 = df['col2'].unique()

# 生成笛卡尔积基准表,原生实现性能远高于逐行循环
full_base = pd.MultiIndex.from_product(
    [unique_col1, unique_col2],
    names=['col1', 'col2']
).to_frame(index=False)

若需要强制纳入未在现有数据中出现的固定类别,直接手动指定unique_col2的列表即可,无需依赖现有数据的取值。

第三步:关联原始数据并填充缺失值

以完整基准表为主表左关联原始有效数据,对未匹配到的col3缺失值填充为0,得到最终结果:

# 左关联保留全量基准结构
result = full_base.merge(
    df[['col1', 'col2', 'col3']],
    on=['col1', 'col2'],
    how='left'
)

# 缺失值填充为0
result['col3'] = result['col3'].fillna(0).astype(int)

最终输出结构校验

运行后输出result即可得到与示例完全一致的结果:

col1col2col3
2000b110
2000c120
2000d130
2001b10
2001c120
2001d140
2002b10
2002c10
2002d160

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 22:57:04