【问题标题】:pandas calculate variance from aggregation大熊猫从聚合中计算方差
【发布时间】:2020-01-10 12:43:39
【问题描述】:

我有一个包含这些列的数据框:DateIDValue。我需要在Value 上执行均值、中值和方差,我像这样使用.agg

df = dataset\
    .groupby(['ID', pd.Grouper(key='Date', freq='60T')])['Value']\
    .agg(['mean', 'median', 'var'])\
    .reset_index()

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

      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

在最后一个数字的末尾应该有方差列,而不是我什么都没有(或NaNs,如果显示在数据框中)。我该如何解决这个问题?

【问题讨论】:

  • 只是理论上 - 也许你的分组每组返回一行 - 然后自然 mean=median 和 var=0 ?
  • 对于平均值 = 中位数它可以,但为什么 var 仍然是 nan 而不是 0?
  • 因为你每组有 1 行 - 检查一个虚拟示例:`` df.groupby(df.index).agg(["mean", "median", "var"]) .reset_index()``` - 它显然使用 1/(N-1) 的方差估计器,如果 N=1,则返回 NaN。 en.wikipedia.org/wiki/Variance
  • 天哪,你是对的。所以我简单地填写na(0)。谢谢!
  • 不用担心,很高兴它成功了

标签: python pandas variance


【解决方案1】:

Grzegorz Skibinski's comment 是解决方案:

因为您每组有 1 行 - 请查看一个虚拟示例:df.groupby(df.index).agg(["mean", "median", "var"]).reset_index() - 它显然使用 1/(N-1) 的方差估计器,如果 N=1,则返回 NaN。 http://en.wikipedia.org/wiki/Variance

【讨论】:

    猜你喜欢
    • 2019-04-03
    • 2021-06-21
    • 1970-01-01
    • 2022-11-28
    • 2022-12-16
    • 2021-01-05
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多