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

如何为Pandas DataFrame中缺失的序列值添加前一行重复行?

解决方案

方法一:重新索引+前向填充(适合连续整数范围缺失)

这种方法通过生成A列完整的整数序列,重新索引后用前一行的值填充缺失的B列,操作简洁高效。

import pandas as pd

# 原数据
df = pd.DataFrame({'A':[0,1,2,3,5,6,7], 'B':['green','red','blue','blue','black','white','green']})

# 生成A列完整的整数范围(从最小值到最大值)
full_A_range = pd.RangeIndex(start=df['A'].min(), stop=df['A'].max() + 1)

# 以A列为索引重新对齐数据,并用前向填充补充B列缺失值
df_filled = df.set_index('A').reindex(full_A_range).ffill().reset_index()

# 修正列名(reset_index后原A列变为index,改回A)
df_filled.rename(columns={'index': 'A'}, inplace=True)

print(df_filled)

输出结果:

A      B
0  0  green
1  1    red
2  2   blue
3  3   blue
4  4   blue
5  5  black
6  6  white
7  7  green

方法二:手动识别缺失值并插入行(灵活适配多场景)

如果需要精准控制每一个缺失行的生成,可以先找出A列的缺失值,再构造对应行合并到原数据中。

import pandas as pd

# 原数据
df = pd.DataFrame({'A':[0,1,2,3,5,6,7], 'B':['green','red','blue','blue','black','white','green']})

# 找出所有缺失的A值
missing_A_values = []
for idx in range(len(df) - 1):
    current_a = df['A'].iloc[idx]
    next_a = df['A'].iloc[idx + 1]
    if next_a - current_a > 1:
        # 生成当前值到下一个值之间的所有缺失整数
        missing_A_values.extend(range(current_a + 1, next_a))

# 构造缺失行的列表
missing_rows = []
for val in missing_A_values:
    # 获取缺失值前一行的B列值
    prev_b = df.loc[df['A'] == val - 1, 'B'].iloc[0]
    missing_rows.append({'A': val, 'B': prev_b})

# 合并原数据与缺失行,按A列排序后重置索引
df_filled = pd.concat([df, pd.DataFrame(missing_rows)]).sort_values('A').reset_index(drop=True)

print(df_filled)

此方法同样能得到期望的输出,适合存在多个不连续缺失值的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:05:26