如何计算 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
具体来说,假设我们有一个数据框
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