pandas如何仅对指定分组的指定行执行backfill值回填操作
Pandas多级索引定向回填简化方案
直接基于现有多级索引操作即可,无需反复调整索引结构,核心代码如下:
# 仅填充2021年的空缺值,取同id下2022年的value值,其他年份数据保持不变 df.loc[df.index.get_level_values('year') == 2021, 'value'] = df.groupby('id')['value'].bfill(limit=1)
代码说明
- 无需做索引交换、重置、额外拼接等冗余操作,直接基于(id, year)多级索引完成筛选和赋值
groupby('id')['value'].bfill(limit=1)会按id分组后对空缺值做单次后向填充,刚好匹配2021年空缺取紧邻的2022年值的需求- 仅对2021年的value列赋值,2019、2020、2022年的原始数据不会被改动,完全符合需求
效果验证
和你给出的预期结果完全匹配:
| id | year | 原值 | 处理后值 |
|---|---|---|---|
| A | 2019 | 空 | 空 |
| A | 2020 | 1 | 1 |
| A | 2021 | 空 | 3 |
| A | 2022 | 3 | 3 |
| B | 2019 | 空 | 空 |
| B | 2020 | 12 | 12 |
| B | 2021 | 空 | 11 |
| B | 2022 | 11 | 11 |
内容的提问来源于stack exchange,提问作者Martien Lubberink
相关产品推荐
相关产品推荐

