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

Pandas如何按字典补全DataFrame缺失等级行并填充对应计数值

解决方案

你可以按每组grade+count列单独构造后拼接,完整实现代码如下:

import pandas as pd
import numpy as np

# 原始数据定义
df = pd.DataFrame(data={'grade_1':['A','B','C'],
                        'grade_1_count': [19,28,32], 
                        'grade_2': ['pass','fail',np.nan],
                        'grade_2_count': [39,18, np.nan]})
grade_dict = {'grade_1':['A','B','C','D','E','F'],
            'grade_2' : ['pass','fail','not present', 'borderline']}

# 计算最终DataFrame的总行数:取所有等级列表的最大长度
max_len = max(len(v) for v in grade_dict.values())
result = {}

for grade_col, full_grades in grade_dict.items():
    count_col = f"{grade_col}_count"
    # 构造 等级->计数 的映射字典
    grade_to_count = dict(zip(df[grade_col].dropna(), df[count_col].dropna()))
    # 补全grade列:全量等级+后续补nan对齐最大长度
    result[grade_col] = full_grades + [np.nan]*(max_len - len(full_grades))
    # 补全count列:已有等级取对应值,新增等级填0,后续补nan对齐最大长度
    count_values = [grade_to_count.get(g, 0) for g in full_grades]
    result[count_col] = count_values + [np.nan]*(max_len - len(full_grades))

# 生成最终DataFrame
expected_df = pd.DataFrame(result)
print(expected_df)

代码说明

  • 先取所有等级列表的最长长度作为最终表的总行数,保证所有列长度一致
  • 为每个grade列生成等级→计数的映射,避免反复查找原表
  • 新增的等级对应的count值统一填0,超过当前等级列表长度的位置统一填np.nan,完全匹配需求
  • 注:你给出的预期输出里not preset为笔误,实际运行结果为not present,其余逻辑完全符合预期。

内容的提问来源于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 04:15:03