如何基于数值列补全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
相关产品推荐
相关产品推荐

