如何计算熊猫DataFrame中的分组均值和方差?

时间:2018-11-29 01:14:48

标签: python mean pandas-groupby variance

我有一个DataFrame,我想为每个人计算每一行的均值和方差。此外,在计算平均值和方差时,必须有列日期和时间顺序;数据框已按日期排序。该日期仅是最早日期之后的天数。人员行最早日期的均值仅是列Points中的值,并且方差应为NAN或0。然后,对于第二个日期,均值应为该列中值的均值此日期和上一个日期的分数。这是我生成数据框的代码:

import pandas as pd
import numpy as np
data=[["Al",0, 12],["Bob",2, 10],["Carl",5, 12],["Al",5, 5],["Bob",9, 2]
 ,["Al",22, 4],["Bob",22, 16],["Carl",33, 2],["Al",45, 7],["Bob",68, 4]
 ,["Al",72, 11],["Bob",79, 5]]
df= pd.DataFrame(data, columns=["Name", "Date", "Points"])
print(df)

     Name  Date  Points
0     Al     0      12
1    Bob     2      10
2   Carl     5      12
3     Al     5       5
4    Bob     9       2
5     Al    22       4
6    Bob    22      16
7   Carl    33       2
8     Al    45       7
9    Bob    68       4
10    Al    72      11
11   Bob    79       5

这是我的代码,用于获取均值和方差:

df['Mean'] = df.apply(
lambda x: df[(df.Name == x.Name) & (df.Date < x.Date)].Points.mean(), 
axis=1)

df['Variance'] = df.apply(
lambda x: df[(df.Name == x.Name)& (df.Date < x.Date)].Points.var(), 
axis=1)

但是,均值只移动一行,方差只移动两行。通过NameDate排序时获得的数据帧为:

    Name    Date    Points  Mean    Variance
 0  Al       0       12      NaN        NaN
 3  Al       5       5     12.000000    NaN
 5  Al       22      4     8.50000  24.500000
 8  Al       45      7     7.000000 19.000000
10  Al       72      11    7.000000 12.666667
 1  Bob      2       10    NaN          NaN
 4  Bob      9       2     10.000000    NaN
 6  Bob      22      16    6.000000 32.000000
 9  Bob      68      4     9.333333 49.333333
11  Bob      79      5     8.000000 40.000000
2   Carl     5       12    NaN          NaN
7   Carl     33      2     12.000000    NaN

相反,数据框应如下所示:

Name        Date    Points  Mean    Variance
 0  Al       0       12      12       NaN
 3  Al       5       5       8.5      24.5
 5  Al       22      4       7        19
 8  Al       45      7       7        12.67
10  Al       72      11      7.8      ...
 1  Bob      2       10      10        NaN
 4  Bob      9       2       6        32
 6  Bob      22      16      9.33     49.33
 9  Bob      68      4       8        40
11  Bob      79      5       7.4      ...
2   Carl     5       12      12       NaN
7   Carl     33      2       7        50

我应该改变什么?

0 个答案:

没有答案