如何为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
相关产品推荐
相关产品推荐

