如何填充pandas多层索引DataFrame第二层级的NaN缺失值
方法1:按通道分组后前向填充(最符合pandas风格的简洁写法)
你的需求是每个通道独立执行前向填充,直接按channel索引层级分组后调用ffill()即可,一行代码就能完成:
import pandas as pd # 所有通道各自独立前向填充NaN df = df.groupby(level='channel').ffill()
这个方法会自动对每个通道的所有列单独执行前向填充,完全符合你要的「同通道同列用上一个有效值填充NaN」的要求,不需要手动筛选子表再赋值。
方法2:用IndexSlice筛选二级索引(适合仅修改特定通道的场景)
你提到的无法直接筛选二级索引的问题,可以用pd.IndexSlice解决,语法如下:
# 先创建索引切片器 idx = pd.IndexSlice # 筛选所有时间下通道B的所有数据,返回的是可修改的视图 # 单独对通道B执行前向填充 df.loc[idx[:, 'B'], :] = df.xs('B', level='channel').ffill()
如果需要同时处理A和B两个通道,用方法1的分组写法效率和可读性更高。
效果验证
执行完填充操作后,原数据中2021-01-03、2021-01-05的通道B的NaN值,会被分别替换为2021-01-02、2021-01-04的通道B对应列的有效值,符合预期。
内容的提问来源于stack exchange,提问作者Frank Blabu
相关产品推荐
相关产品推荐

