如何在多层索引DataFrame中按索引分组向前填充score3列
问题描述
现有如下初始数据表格:
| Year | Month | score1 | score2 | score3 |
|---|---|---|---|---|
| 2022 | Jan | 98 | NaN | 100 |
| NaN | feb | NaN | 39 | NaN |
| 2021 | sept | 100 | 50 | NaN |
| NaN | nov | 100 | NaN | 76 |
| NaN | dec | 100 | 52 | NaN |
需要将其处理为以下结果:
| Year | Month | score1 | score2 | score3 |
|---|---|---|---|---|
| 2022 | Jan | 98 | NaN | 100 |
| 2022 | feb | NaN | 39 | 100 |
| 2021 | sept | 100 | 50 | NaN |
| 2021 | nov | 100 | NaN | 76 |
| 2021 | dec | 100 | 52 | 76 |
要求仅对score3列执行组内向前填充(forward fill),填充范围限制在同一Year分组内,其他列保持不变。
解决方案
步骤1:构造初始DataFrame
先把原始数据转换成pandas的DataFrame:
import pandas as pd import numpy as np df = pd.DataFrame({ 'Year': ['2022', np.nan, '2021', np.nan, np.nan], 'Month': ['Jan', 'feb', 'sept', 'nov', 'dec'], 'score1': [98, np.nan, 100, 100, 100], 'score2': [np.nan, 39, 50, np.nan, 52], 'score3': [100, np.nan, np.nan, 76, np.nan] })
步骤2:补全Year列的缺失值
原始数据中同一Year的行仅第一行有值,先通过向前填充补全Year列:
df['Year'] = df['Year'].ffill()
步骤3:对score3执行组内向前填充
按Year分组后,仅对score3列执行向前填充,其他列保持原样:
df['score3'] = df.groupby('Year')['score3'].ffill()
执行完上述代码后,即可得到目标结果表格。
内容的提问来源于stack exchange,提问作者lost
相关产品推荐
相关产品推荐

