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

如何在Pandas DataFrame中为全部分组、日期补全缺失的评分分类

实现方法

你原来的代码仅生成了group和score两个维度的笛卡尔积,只需将date维度也加入全组合生成逻辑即可,以下是两种可行实现:

方法1:笛卡尔积左关联(和你原有写法逻辑一致,易理解)

import pandas as pd
import numpy as np
from itertools import product

# 原数据
x = pd.DataFrame(data={
    'date'  : ['2020-06-01','2020-06-01','2020-06-02','2020-06-01','2020-06-02','2020-06-01','2020-06-02','2020-06-02','2020-06-02'],
    'group' : ['a','a','a','b','b','c','c','c','d'],
    'score' : ['high','low','mid','low','high','high','high','mid','high'],
    'count' : [12,13,2,19,22,3,4,49,12]
})

# 提取三个维度的所有取值
dates = x['date'].unique()
groups = x['group'].unique()
score_cats = ['high', 'mid', 'low']

# 生成三个维度的全组合
full_dim = pd.DataFrame(
    list(product(dates, groups, score_cats)),
    columns=['date', 'group', 'score']
)

# 左关联原表,缺失值填充0,去掉fillna则默认填充NaN
result = full_dim.merge(x, how='left', on=['date', 'group', 'score']).fillna(0)

方法2:多级索引重索引(性能更优,适合大数据量场景)

# 基于原表设置三维度多级索引
x_multi = x.set_index(['date', 'group', 'score'])
# 生成全组合的多级索引
full_idx = pd.MultiIndex.from_product(
    [x['date'].unique(), x['group'].unique(), ['high', 'mid', 'low']],
    names=['date', 'group', 'score']
)
# 重索引填充缺失值后恢复普通列
result = x_multi.reindex(full_idx, fill_value=0).reset_index()

两种方法输出的结果都符合预期:每个分组对应2个日期×3个评分等级共6行数据,缺失的count字段可根据需求填充0或np.nan。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:12:02