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

求助: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 02:12:03