了解具有缺失值的 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')
我有一个多索引 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')