Python - Pandas:月平均值与月平均值之间的差异

时间:2013-07-02 11:58:05

标签: python pandas

我在数据帧上有平均值计算的不同值。通常情况下,我认为它们应该是一样的。 或者之间有什么区别:

daily1 = daily_above_zero['2011-2'].mean()

daily1
Out[181]: 
P_Sanyo_Gesloten    136.751724
P_Sanyo_Open        142.491701
dtype: float64

daily2 = daily_above_zero['2011-2'].resample('m',how='mean')

daily2
Out[187]: 
P_Sanyo_Gesloten    136.751724
P_Sanyo_Open        142.491701
dtype: float64

和此:

daily2 = daily_above_zero['2011-2'].resample('D',how='mean').mean()

daily2
Out[185]: 
P_Sanyo_Gesloten    132.178545
P_Sanyo_Open        137.536975
dtype: float64

1 个答案:

答案 0 :(得分:2)

In [11]: df = DataFrame(randn(100000,2),index=pd.date_range('20130101',periods=100000,freq='T'),columns=list('AB'))

In [12]: df
Out[12]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 100000 entries, 2013-01-01 00:00:00 to 2013-03-11 10:39:00
Freq: T
Data columns (total 2 columns):
A    100000  non-null values
B    100000  non-null values
dtypes: float64(2)

这是每列所有观察值的总和/ 100000

In [13]: df.mean()
Out[13]: 
A   -0.001421
B   -0.000764
dtype: float64

这是每列的平均值,但按月分组,因此每月的数量不同

In [14]: df.resample('m',how='mean')
Out[14]: 
                   A         B
2013-01-31 -0.004447  0.003479
2013-02-28  0.001062 -0.002656
2013-03-31  0.000903 -0.008289

上述数字的平均值,例如月平均值的平均值

In [15]: df.resample('m',how='mean').mean()
Out[15]: 
A   -0.000827
B   -0.002489
dtype: float64

每天分组,然后取平均值

In [16]: df.resample('D',how='mean')
Out[16]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 70 entries, 2013-01-01 00:00:00 to 2013-03-11 00:00:00
Freq: D
Data columns (total 2 columns):
A    70  non-null values
B    70  non-null values
dtypes: float64(2)

平均值的平均值

In [17]: df.resample('D',how='mean').mean()
Out[17]: 
A   -0.001005
B   -0.001491
dtype: float64

如果您的所有观察结果都在同一个月,那么(您在上面的第1部分和第2部分)

df.resample('M',how='mean') == df.mean()

第3部分应该是相同的,只有在每天都有一套完整的观察结果时。如果是这种情况,在您的示例中不清楚。

In [19]: df['2013-2'].mean()
Out[19]: 
A    0.001062
B   -0.002656
dtype: float64

In [20]: df['2013-2'].resample('D',how='mean').mean()
Out[20]: 
A    0.001062
B   -0.002656
dtype: float64

当我的意思是每一天,我的例子每天都有60 * 24的障碍

In [21]: df['2013-2'].count()
Out[21]: 
A    40320
B    40320
dtype: int64

In [22]: 24*60
Out[22]: 1440

2月28日

In [23]: 24*60*28
Out[23]: 40320