具体来说,我们有一个数据框
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()
答案 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