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

如何用另一列填充DataFrame指定列首个非NA值前的缺失值

问题描述

现有如下示例DataFrame:

import pandas as pd
import numpy as np

# Example DataFrame
df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [np.nan, np.nan, 30, 40, np.nan],
                   'C': [np.nan, np.nan, np.nan, 400, 500]})

希望将其转换为如下形式:

A     B      C
0  1   1.0    1.0
1  2   2.0    2.0
2  3  30.0    3.0
3  4  40.0  400.0
4  5   NaN  500.0

需求:填充B、C列中首个非NA值之前的缺失值,剩余缺失值保持不变。

解决方案

通过定位目标列首个非空值的位置,仅对该位置之前的缺失值进行填充,具体实现如下:

代码实现

import pandas as pd
import numpy as np

df = pd.DataFrame({'A': [1, 2, 3, 4, 5],
                   'B': [np.nan, np.nan, 30, 40, np.nan],
                   'C': [np.nan, np.nan, np.nan, 400, 500]})

# 遍历需要处理的列
for col in ['B', 'C']:
    # 获取当前列第一个非空值的索引
    first_valid_idx = df[col].first_valid_index()
    if first_valid_idx is not None:
        # 对首个非空值之前的行,用A列对应值填充缺失
        df.loc[:first_valid_idx-1, col] = df.loc[:first_valid_idx-1, 'A']

print(df)

输出结果

A     B      C
0  1   1.0    1.0
1  2   2.0    2.0
2  3  30.0    3.0
3  4  40.0  400.0
4  5   NaN  500.0

关键说明

  • first_valid_index() 方法精准返回列中第一个非NA值的索引,若整列全为NA则返回None(可根据实际需求添加额外判断)
  • 使用loc[:first_valid_idx-1, col]限定填充范围,确保不会修改首个非空值及之后的行
  • 直接赋值A列对应行的值,保证填充逻辑的准确性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:17:28