如何计算 DataFrame 中缺失值的方差 - Python Pandas?

How to compute variance with missing value in a DataFrame - Python Pandas?

具体来说,假设我们有一个数据框

df1:

name    date    valueA  valueB  color
A   12/1/14     3       10      red
A   12/2/14     1       30      red
B   12/1/14     2       30      green
B   12/3/14     3       20      green
C   12/3/14     4       40      white

日期范围是 12/1/14 到 12/4/14。每个组名都带有一个 "color" 标签,在不同的日子里不会改变。我想计算每组 "A"、"B" 和 "C" 中值的方差。 未显示在每个组的数据框中的那些日期的值将假定为 0

带有方差的预期结果是:

name varA   varB    color
A   2       20      red
B   2.25    22.5    green
C   4       40      white

以下代码未生成预期结果。

df.groupby("name")['valueA', 'valueB'].var()
>>> df.set_index(['date', 'name']).unstack().fillna(0).apply(var)
           name
value  A       1.5000
       B       1.6875
       C       3.0000
dtype: float64

使用名称和颜色的多列排列日期索引的 DataFrame:

df.set_index(['date', 'name', 'color']).unstack([1, 2]).fillna(0) 
         valueA                valueB              
name          A      B      C       A      B      C
color       red  green  white     red  green  white
date                                               
12/1/14       3      2      0      10     30      0
12/2/14       1      0      0      30      0      0
12/3/14       0      3      4       0     20     40

然后您可以只使用此 DataFrame 上的 var 函数来获取每一列的方差:

df.set_index(['date', 'name', 'color']).unstack([1, 2]).fillna(0).var()
        name  color
valueA  A     red        2.333333
        B     green      2.333333
        C     white      5.333333
valueB  A     red      233.333333
        B     green    233.333333
        C     white    533.333333
dtype: float64