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

如何为Pandas DataFrame缺失值位置插入多行空记录

解决DataFrame缺失序列插入多行NaN记录的问题

问题说明

现有DataFrame定义如下:

import pandas as pd
import numpy as np

df = pd.DataFrame({"A":[0,1,3,5,6], "B":['B0','B1','B3','B5','B6'], "C":['C0','C1','C3','C5','C6']})

需求:在A列连续序列的缺失数值位置插入10行记录,其中A列为该缺失数值,B、C列为NaN。例如A列缺失的2和4,各插入10行对应值的NaN记录。

之前尝试的方法仅能为每个缺失值插入1行,代码如下:

df1 = df.merge(how='right', on='A', right = pd.DataFrame({'A':np.arange(df.iloc[0]['A'],
                                                                        df.iloc[-1]['A']+1)})).reset_index().drop(['index'], axis=1)

可行解决方案

方法一:循环构造扩展A序列

# 生成A列的完整连续序列
full_A = np.arange(df['A'].min(), df['A'].max() + 1)

# 构造包含重复行的A列表:原数据存在的A保留1行,缺失的A重复10次
expanded_A = []
for a in full_A:
    if a in df['A'].values:
        expanded_A.append(a)
    else:
        expanded_A.extend([a] * 10)

# 创建基础DataFrame并合并原数据
result = pd.DataFrame({'A': expanded_A}).merge(df, on='A', how='left')

# 查看结果
print(result)

方法二:利用repeat方法更简洁实现

# 生成完整A序列,并标记每个值的重复次数
full_A_df = pd.DataFrame({'A': np.arange(df['A'].min(), df['A'].max() + 1)})
full_A_df['repeat_count'] = full_A_df['A'].isin(df['A']).map({True: 1, False: 10})

# 按标记的次数重复行,再合并原数据
result = (full_A_df
          .loc[full_A_df.index.repeat(full_A_df['repeat_count'])]
          .drop('repeat_count', axis=1)
          .merge(df, on='A', how='left'))

# 查看结果
print(result)

方法说明

两种方法的核心逻辑一致:

  1. 先生成A列的完整连续序列,覆盖从最小值到最大值的所有整数;
  2. 对序列中原数据不存在的A值,生成10行重复记录;原数据存在的A值保留1行;
  3. 通过左合并原DataFrame,自动为原数据存在的A值填充B、C列,缺失的A值则自动填充NaN,最终得到需求的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:10:34