如何基于分类列筛选后填充指定类别行的数值列NA值且不改变原DataFrame形状
pandas 按分类填充指定列缺失值
示例数据集构造
先构造题目中的示例DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Cat_col': ['SS', 'PP', 'CC', 'XX', 'SS', 'XX', 'CC', 'BB'], 'num_col1': [22, np.nan, 128, np.nan, 67, np.nan, 47, np.nan], 'num_col2': [54, 89, 34, 56, 56, 90, 10, 29] })
处理逻辑与代码
要实现仅对Cat_col为PP和XX的行,用num_col2填充num_col1的缺失值,且不修改原DataFrame,可按以下步骤操作:
- 复制原DataFrame,避免修改原始数据
- 通过条件筛选定位目标行,完成填充
代码如下:
# 复制原DataFrame df_filled = df.copy() # 定位符合条件的行并填充 df_filled.loc[ (df_filled['Cat_col'].isin(['PP', 'XX'])) & (df_filled['num_col1'].isna()), 'num_col1' ] = df_filled['num_col2']
处理后结果
执行上述代码后,df_filled的内容为:
| Cat_col | num_col1 | num_col2 |
|---|---|---|
| SS | 22 | 54 |
| PP | 89 | 89 |
| CC | 128 | 34 |
| XX | 56 | 56 |
| SS | 67 | 56 |
| XX | 90 | 90 |
| CC | 47 | 10 |
| BB | NaN | 29 |
可以看到:
- 仅
PP和XX类别的num_col1缺失值被填充,其他类别(如BB)的缺失值保持不变 - 原DataFrame
df的结构和数据完全未受影响
内容的提问来源于stack exchange,提问作者mr17.5stuntman
相关产品推荐
相关产品推荐

