了解具有缺失值的 Group By 行为并找出 .mean() 与手动求解均值之间的差异

Understanding Group By's behavior with missing values and figuring out a discrepancy between .mean() and manually solving for the mean

我有一个多索引 df,格式如下:

                      pid    time    delta_t
sess_id     vis_id      

id1         vis_id1    id1    t_0      1
            vis_id1    id2    t_1      5
            vis_id1    id1    t_2      NA 

id2         vis_id2    id3    t_3      6
            vis_id2    id2    t_4      7
            vis_id2    id1    t_5      NA   

上下文:Delta_t 是在特定页面上花费的时间,pid--时间为 NA 的实例是因为没有记录该页面的时间,因为他们离开了网站并且不再逐页跟踪

我想找到每个特定页面的平均时间长度 (avg delta_t),所以我进行了分组并创建了另一个 df 以附加到包含有关我的页面 ID 的信息的现有 df pid:

df2 = df1.reset_index().groupby('pid')['delta_t'].mean().reset_index().set_index('pid')

出于某些奇怪的原因,在分组依据之后使用 .mean() 函数产生的平均值不同于手动将平均值相加并除以 pid

的实例

我认为它必须这样做 group_by.mean() 忽略 NA 并且手动除法包括它们。或相反亦然。无论如何我可以在我的数据框上做 group_by.mean() 这样如果值是 NA 它忽略它但仍然除以总观察值?

用0填充NA,然后将其包含在均值中,对分母有贡献但对分子没有贡献:

df1.fillna(0).reset_index().groupby('pid')['delta_t'].mean().reset_index().set_index('pid')