求助:Pandas为缺失'd'的KeyID插入含NaN的行(无法用pivot)
解决方案
可以通过以下步骤实现需求:
第一步:生成包含所有KeyID和'd'的基准数据集
先提取原DataFrame中所有唯一的KeyID,构造每个KeyID对应number='d'的DataFrame,作为需要检查的基准。第二步:找出原数据中缺失的
KeyID+'d'组合
使用merge方法的indicator=True参数,对比原数据和基准数据集,筛选出原数据中不存在的组合。第三步:合并原数据和缺失的行
将筛选出的缺失行(其余列默认设为NaN)添加到原DataFrame中,最后按KeyID排序整理结果。
完整代码示例
import pandas as pd # 原DataFrame df = pd.DataFrame({'KeyID':[1,1,1,1,2,2,2,3,3,3], 'number':['a','a','c','d','a','b','c','a','b','c']}) # 生成基准数据集:所有KeyID + 'd' key_ids = df['KeyID'].unique() base_df = pd.DataFrame({'KeyID': key_ids, 'number': 'd'}) # 找出原数据中缺失的行 missing_rows = base_df.merge(df, on=['KeyID', 'number'], how='left', indicator=True) missing_rows = missing_rows[missing_rows['_merge'] == 'left_only'].drop('_merge', axis=1) # 合并原数据和缺失行,并重排序 result_df = pd.concat([df, missing_rows], ignore_index=True).sort_values('KeyID').reset_index(drop=True) print(result_df)
输出结果
KeyID number 0 1 a 1 1 a 2 1 c 3 1 d 4 2 a 5 2 b 6 2 c 7 2 d 8 3 a 9 3 b 10 3 c 11 3 d
该方法不受number列重复值影响,通过KeyID与number的组合校验缺失,无需依赖透视操作。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

