为DataFrame中缺失值生成possible min和possible max列的实现方案
解决方案
初始数据
| index | value |
|---|---|
| 0 | 1 |
| 1 | -1 |
| 2 | -1 |
| 3 | -1 |
| 4 | 6 |
| 5 | -1 |
| 6 | -1 |
| 7 | -1 |
| 8 | 10 |
需求说明:value列中-1代表缺失值,且该列数值呈递增趋势;需新增possible min和possible max列,为每个缺失值标记前后相邻的有效值作为范围,有效值对应的这两列留空。
实现代码
使用Pandas可通过填充方法快速完成需求:
import pandas as pd # 构建初始DataFrame df = pd.DataFrame({ 'index': [0,1,2,3,4,5,6,7,8], 'value': [1,-1,-1,-1,6,-1,-1,-1,10] }) # 将-1替换为NaN便于处理缺失值逻辑 df['value'] = df['value'].replace(-1, pd.NA) # 生成possible min:向前填充最近的有效值 df['possible min'] = df['value'].ffill() # 生成possible max:向后填充最近的有效值 df['possible max'] = df['value'].bfill() # 将NaN换回原始的-1标记 df['value'] = df['value'].fillna(-1) # 为有效值所在行清空possible min和max列 valid_mask = df['value'] != -1 df.loc[valid_mask, ['possible min', 'possible max']] = pd.NA # 格式化空值显示为空白(可选) df = df.fillna('') print(df)
输出结果
| index | value | possible min | possible max |
|---|---|---|---|
| 0 | 1 | ||
| 1 | -1 | 1 | 6 |
| 2 | -1 | 1 | 6 |
| 3 | -1 | 1 | 6 |
| 4 | 6 | ||
| 5 | -1 | 6 | 10 |
| 6 | -1 | 6 | 10 |
| 7 | -1 | 6 | 10 |
| 8 | 10 |
处理完成后,即可基于possible min和possible max列执行自定义缺失值填充逻辑。
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

