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

Pandas按索引补全缺失行并保持指定顺序的实现问题

实现代码

你可以通过groupby分组处理每个索引组,直接向缺少c行的分组末尾追加记录即可,原有分组的a、b顺序下追加的c行自然在b之后:

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({'level_0':[0,0,0,1,1,2,2,2,3,3],'name':['a','b','c','a','b','a','b','c','a','b'],'value':[1,2,3,1,2,1,2,3,1,2]})
df.set_index('level_0', inplace=True)

def fill_missing_c(group):
    # 检查当前分组是否存在name为c的记录
    if 'c' not in group['name'].values:
        # 构造要插入的c行,索引继承当前分组的level_0值
        insert_row = pd.DataFrame({'name': ['c'], 'value': [3]}, index=[group.index[0]])
        group = pd.concat([group, insert_row], ignore_index=False)
    return group

# 按level_0索引分组应用处理逻辑,group_keys=False避免新增多余索引层级
df = df.groupby(level='level_0', group_keys=False).apply(fill_missing_c)
print(df)

兜底排序方案

如果你的原始数据可能存在分组内a、b顺序错乱的情况,可以加自定义排序逻辑保证c永远在b之后:

def fill_missing_c(group):
    if 'c' not in group['name'].values:
        insert_row = pd.DataFrame({'name': ['c'], 'value': [3]}, index=[group.index[0]])
        group = pd.concat([group, insert_row], ignore_index=False)
    # 按name自定义排序,保证a<b<c的固定顺序
    sort_rule = {'a': 1, 'b': 2, 'c': 3}
    group = group.sort_values(by='name', key=lambda x: x.map(sort_rule))
    return group

运行上述代码后输出结果和你给出的期望结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 12:09:03