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

如何基于数值列补全Pandas DataFrame中的缺失行?

解决方案

步骤说明

  • 按ID分组,每个ID下根据SUB_GROUP和CHUNK生成所有应存在的(N1,N2)组合
  • 找出当前DataFrame中缺失的组合,构造成完整行
  • 将缺失行合并到原DataFrame,整理得到最终结果

完整代码

import pandas as pd

# 原DataFrame
df = pd.DataFrame({'ID': ['ID001', 'ID001', 'ID001', 'ID002'],
 'N1': [1, 1, 2, 1],
 'N2': [1, 2, 1, 3],
 'SUB_GROUP': [2, 2, 2, 1],
 'CHUNK': [2, 2, 2, 4]})

missing_rows = []

# 遍历每个唯一ID
for id_val in df['ID'].unique():
    id_df = df[df['ID'] == id_val]
    # 取当前ID对应的SUB_GROUP和CHUNK(假设同ID下这两个值统一)
    sub_group = id_df['SUB_GROUP'].iloc[0]
    chunk = id_df['CHUNK'].iloc[0]
    
    # 生成该ID下所有应有的(N1,N2)组合:N1固定为sub_group,N2从1到chunk
    expected_pairs = [(sub_group, n2) for n2 in range(1, chunk + 1)]
    # 获取已存在的组合
    existing_pairs = list(id_df[['N1', 'N2']].itertuples(index=False, name=None))
    
    # 筛选缺失的组合
    missing_pairs = [pair for pair in expected_pairs if pair not in existing_pairs]
    
    # 构造缺失行
    for n1, n2 in missing_pairs:
        missing_rows.append({
            'ID': id_val,
            'N1': n1,
            'N2': n2,
            'SUB_GROUP': sub_group,
            'CHUNK': chunk
        })

# 合并数据并排序
missing_df = pd.DataFrame(missing_rows)
final_df = pd.concat([df, missing_df], ignore_index=True)
final_df = final_df.sort_values(by=['ID', 'N2']).reset_index(drop=True)

print(final_df)

输出结果

ID  N1  N2  SUB_GROUP  CHUNK
0  ID001   2   1          2      2
1  ID001   1   1          2      2
2  ID001   1   2          2      2
3  ID002   1   1          1      4
4  ID002   1   2          1      4
5  ID002   1   3          1      4
6  ID002   1   4          1      4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:03:28