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

时间:2015-05-15 00:55:39

标签: python join pandas merge dataframe

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

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。每个组名都标有“颜色”,不会在不同的日期发生变化。我想计算每组“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()

1 个答案:

答案 0 :(得分:1)

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

使用MultiColumn为日期编制索引的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