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

如何按Name分组补全数据表缺失Stage行并填充0分

按Name分组补全缺失Stage行并设置Score为0的实现方案

需求说明:按Name分组,为每个Name补全所有缺失的Stage行,缺失行的Score字段设置为0。


原始数据表

StageIDNameScore
stage 1234name110
Stage 2234name110
Stage 3234name110
Stage 4234name120
Stage 6234name15
Stage 7234name110
Stage 1200name220
Stage 3200name220
Stage 4200name220
Stage 5200name220
Stage 6200name220
Stage 7200name220
Stage 1101name310
Stage 2101name310
Stage 3101name310
Stage 4101name310
Stage 5101name310
Stage 6101name310
Stage 7101name310
Stage 3300name420

处理后期望数据表

StageIDNameScore
stage 1234name110
Stage 2234name110
Stage 3234name110
Stage 4234name120
Stage 5234name10
Stage 6234name15
Stage 7234name110
Stage 1200name220
Stage 2200name20
Stage 3200name220
Stage 4200name220
Stage 5200name220
Stage 6200name220
Stage 7200name220
Stage 1101name310
Stage 2101name310
Stage 3101name310
Stage 4101name310
Stage 5101name310
Stage 6101name310
Stage 7101name310
Stage 1300name40
Stage 2300name40
Stage 3300name410
Stage 4300name40
Stage 5300name40
Stage 6300name40
Stage 7300name40

实现方案

方法1:SQL实现

核心思路是先生成Name与Stage的全量组合,再左连接原始表,用COALESCE将缺失的Score替换为0:

WITH all_stages AS (
    -- 获取所有唯一Stage
    SELECT DISTINCT Stage FROM your_table
),
all_names AS (
    -- 获取所有Name及其对应的唯一ID
    SELECT DISTINCT Name, ID FROM your_table
)
SELECT 
    s.Stage,
    n.ID,
    n.Name,
    COALESCE(t.Score, 0) AS Score
FROM all_names n
-- 生成Name与Stage的全量笛卡尔积
CROSS JOIN all_stages s
-- 左连接原始表匹配已有数据
LEFT JOIN your_table t ON n.Name = t.Name AND s.Stage = t.Stage
-- 按Name和Stage排序
ORDER BY n.Name, s.Stage;

方法2:Python Pandas实现

核心思路是构造Name与Stage的全量组合,合并原始数据后填充缺失值:

import pandas as pd

# 构造原始数据(实际场景可从文件/数据库读取)
df = pd.DataFrame({
    'Stage': ['stage 1', 'Stage 2', 'Stage 3', 'Stage 4', 'Stage 6', 'Stage 7',
              'Stage 1', 'Stage 3', 'Stage 4', 'Stage 5', 'Stage 6', 'Stage 7',
              'Stage 1', 'Stage 2', 'Stage 3', 'Stage 4', 'Stage 5', 'Stage 6', 'Stage 7',
              'Stage 3'],
    'ID': [234]*6 + [200]*6 + [101]*7 + [300],
    'Name': ['name1']*6 + ['name2']*6 + ['name3']*7 + ['name4'],
    'Score': [10,10,10,20,5,10,20,20,20,20,20,20,10,10,10,10,10,10,10,20]
})

# 获取所有唯一Stage和Name-ID映射关系
all_stages = df['Stage'].unique()
name_id_map = df[['Name', 'ID']].drop_duplicates().set_index('Name')['ID'].to_dict()

# 生成Name与Stage的全量组合
full_combinations = []
for name in name_id_map.keys():
    for stage in all_stages:
        full_combinations.append({'Stage': stage, 'Name': name, 'ID': name_id_map[name]})

full_df = pd.DataFrame(full_combinations)

# 合并原始数据,填充缺失的Score为0
result_df = full_df.merge(df, on=['Stage', 'ID', 'Name'], how='left')
result_df['Score'] = result_df['Score'].fillna(0).astype(int)

# 按Name和Stage排序
result_df = result_df.sort_values(by=['Name', 'Stage']).reset_index(drop=True)

print(result_df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 09:42:02