Pandas多层索引DataFrame按列将零值替换为分组内最后非零值
多层索引DataFrame分组填充零值最简实现
无需自定义循环或函数,仅用pandas原生链式操作即可完成需求,核心代码仅1行:
processed_df = df.mask(df == 0).groupby(level=0).ffill().fillna(0)
逻辑说明
df.mask(df == 0):将所有值为0的单元格替换为NaN,标记为待填充位置.groupby(level=0):按多层索引的第一层级(即示例中外层的0、1分组)拆分数据.ffill():对每个分组独立执行向前填充,自动取同列上方最后一个非空(原非零)值填充下方空值,自动覆盖到分组末尾.fillna(0):将分组开头尚未出现非零值位置的空值还原为0,匹配示例中分组首行全0的预期结果
该实现为pandas原生向量化运算,性能远高于自定义apply或逐行循环写法,数据量较大时效率优势明显,执行后输出结果和给出的预期效果完全一致。
内容的提问来源于stack exchange,提问作者Neyls
相关产品推荐
相关产品推荐

