如何基于Pandas DataFrame的另一列值填充NaN?
解决方案
这里有两种简洁高效的方法可以实现你的需求,我来一步步给你说明:
方法一:按A列分组后填充对应值
这种方法适合你的场景——每组的非空值都是固定值,利用groupby分组后统一填充:
import pandas as pd import numpy as np # 构造原始DataFrame df = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b'], 'B': [15, 15, np.nan, 19, np.nan]}) # 分组填充逻辑 df['B'] = df.groupby('A')['B'].transform(lambda x: x.fillna(x.dropna().iloc[0])) print(df)
代码说明:
groupby('A')['B']:按A列的不同取值(a和b)对B列进行分组transform:确保分组处理后的结果能和原DataFrame的索引完全对齐,不会打乱原有数据顺序x.fillna(x.dropna().iloc[0]):对每组的B列,用该组第一个非空值填充NaN(因为你的每组非空值都是相同的,取第一个、均值或者最大值都能得到正确结果)
方法二:用映射字典直接填充
如果A列对应的填充值是提前明确的,直接创建映射字典会更直观:
import pandas as pd import numpy as np # 构造原始DataFrame df = pd.DataFrame({'A': ['a', 'a', 'a', 'b', 'b'], 'B': [15, 15, np.nan, 19, np.nan]}) # 定义A列值到填充值的映射关系 fill_map = {'a': 15, 'b': 19} # 执行填充 df['B'] = df['B'].fillna(df['A'].map(fill_map)) print(df)
代码说明:
df['A'].map(fill_map):根据A列的每个值,从字典中取出对应的填充值,生成一个和原DataFrame长度一致的Seriesfillna:将B列中的NaN,替换成对应位置的填充值
两种方法运行后都会得到你期望的结果:
A B 0 a 15 1 a 15 2 a 15 3 b 19 4 b 19
内容的提问来源于stack exchange,提问作者連哲瑋
相关产品推荐
相关产品推荐

