pandas聚合计算方差

5
我有一个数据框,其中包含以下列:DateIDValue。 我需要对Value执行平均值,中位数和方差,并使用.agg进行操作,像这样:
df = dataset\
    .groupby(['ID', pd.Grouper(key='Date', freq='60T')])['Value']\
    .agg(['mean', 'median', 'var'])\
    .reset_index()

它成功计算了平均值,但当需要计算中位数时,它只是重复平均值,不会存储或创建变量列。以下是结果:

      ID                 Date      mean    median  var
0  13834  2017-02-09 12:00:00  1.474920  1.474920  NaN
1  13834  2017-02-09 16:00:00  4.424796  4.424796  NaN
2  13834  2017-02-09 20:00:00  2.241871  2.241871  NaN
3  13834  2017-02-10 00:00:00  2.654867  2.654867  NaN
4  13834  2017-02-10 04:00:00  2.654867  2.654867  NaN
5  13834  2017-02-10 08:00:00  0.511062  0.511062  NaN

在最后一列应该是方差列,但我得到了空白(或NaN,如果在数据框中显示)。我该如何解决这个问题?


1
仅从理论上讲 - 也许您的分组每组返回一行 - 那么自然均值=中位数且方差=0? - Grzegorz Skibinski
对于均值等于中位数的情况,这是可以理解的,但为什么方差仍然是NaN而不是0呢? - erken
4
由于您的每个组只有1行 - 在一个虚拟示例中检查:df.groupby(df.index).agg(["mean", "median", "var"]).reset_index() - 显然它使用了方差估计器 1/(N-1),如果N=1,则返回NaN。 https://en.wikipedia.org/wiki/Variance - Grzegorz Skibinski
哦,你说得对。所以我只需要使用fillna(0)。谢谢! - erken
没问题,很高兴它起作用了。 - Grzegorz Skibinski
1个回答

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接