Pandas如何按条件用另一列值填充DataFrame指定列空值
问题场景
现有如下结构的Pandas DataFrame:
data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], 'feature1_available?': [0, 1, 1, 'NA', 1, 'NA', 1, 1, 'NA', 1, 1]} df = pd.DataFrame(data)
需要对feature1_available?列的'NA'值执行条件填充,规则如下:
- 同一行
feature1_in_use?列取值为1时,对应位置的'NA'填充为1 - 其余位置的
'NA'统一填充为'X'
填充后期望得到的DataFrame效果如下:
data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], 'feature1_available?': [0, 1, 1, 'X', 1, 1, 1, 1, 1, 1, 1]} df = pd.DataFrame(data)
实现方案
直接用numpy.where做逐行条件判断即可,无需写循环,执行效率高,逻辑清晰:
import pandas as pd import numpy as np # 原始数据 data = {'feature1_in_use?': [0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1], 'feature1_available?': [0, 1, 1, 'NA', 1, 'NA', 1, 1, 'NA', 1, 1]} df = pd.DataFrame(data) # 双层条件判断完成填充 df['feature1_available?'] = np.where( # 第一层判断:定位到值为'NA'的位置 df['feature1_available?'] == 'NA', # 第二层判断:in_use为1填1,否则填'X' np.where(df['feature1_in_use?'] == 1, 1, 'X'), # 非'NA'的位置保留原有值 df['feature1_available?'] )
注意:当前数据中的缺失值是字符串格式的
'NA',如果你的数据里是Pandas可识别的空值(np.nan/None),只需要把第一层判断条件替换为df['feature1_available?'].isna()即可。
执行后打印df,得到的结果和预期完全一致:
feature1_in_use? feature1_available? 0 0 0 1 0 1 2 1 1 3 0 X 4 1 1 5 1 1 6 1 1 7 0 1 8 1 1 9 0 1 10 1 1
内容的提问来源于stack exchange,提问作者rbrt
相关产品推荐
相关产品推荐

