如何为Pandas多索引透视表新增计算非NaN值的均值列
实现代码
Pandas 内置的均值计算方法默认自动跳过NaN值,无需手动实现求和、计数逻辑,适配多索引透视表的写法如下:
假设你的透视表变量名为temp_pivot:
import pandas as pd # 选中days层级下的所有列,按行计算均值后赋值给新列 temp_pivot['avg_num'] = temp_pivot.loc[:, pd.IndexSlice['days', :]].mean(axis=1).astype(int)
代码说明
pd.IndexSlice['days', :]是多索引列的专属选择语法,用于精准选中第一级为days的所有子列,避免其他无关列参与计算mean(axis=1)表示按行计算均值,默认开启skipna=True参数,计算逻辑恰好是「非NaN值总和 / 非NaN值数量」,完全匹配你的需求- 末尾的
.astype(int)用于把浮点数结果转为整数,和你给出的预期输出格式对齐,不需要整数格式可以删掉
如果你确实想按照自己的思路用loc搭配求和、计数手动实现,可以用以下写法,效果完全一致:
# 按行求和 row_sum = temp_pivot.loc[:, pd.IndexSlice['days', :]].sum(axis=1) # 按行统计非NaN值数量 row_count = temp_pivot.loc[:, pd.IndexSlice['days', :]].count(axis=1) # 计算均值 temp_pivot['avg_num'] = (row_sum / row_count).astype(int)
内容的提问来源于stack exchange,提问作者Digital Moniker
相关产品推荐
相关产品推荐

