如何用另一列填充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
相关产品推荐
相关产品推荐

