如何在一个时代内获得一列的平均值?

时间:2014-07-28 08:34:16

标签: python pandas

我需要在一个精确的时代得到一个列的平均值(我将在我的函数的输入中设置): 在我的情况下,日期是索引,所以我可以得到index.week的一周。 然后我想为实例

每隔2周计算一些基本统计数据

因此,我需要每隔2周对数据帧进行“切片”,然后进行计算。它可以破坏已经计算过的数据帧的一部分,但是数据帧中仍然存在的内容不能被删除。

我的第一个猜测是用行迭代器解析数据然后比较它:

# get the week num. of the first row
start_week =  temp.data.index.week[0]

# temp.data is my data frame
for index, row in temp.data.iterrows():
    while index.week < start_week + 2:
        print index.week

但它真的很慢所以不应该是正确的方式

1 个答案:

答案 0 :(得分:1)

欢迎使用Stackoverflow。请注意,您的问题不是很具体,很难为您提供您想要的内容。最理想的情况是,您将提供代码来重新创建数据集并发布预期结果。我将发布两个部分:(i)使用特定时间函数切割的数据帧和(ii)使用滚动窗口操作应用统计函数。

使用数据框和时间索引

问题不在于如何获得x 的平均值,因为你知道如何做到这一点(x.mean())。问题是,如何获得x:如何选择满足某些条件的数据帧元素的时间戳?我将使用我在google搜索一分钟后发现的一系列生成的by the documentation

In[13]: ts
Out[13]: 
2011-01-31    0.356701
2011-02-28   -0.814078
2011-03-31    1.382372
2011-04-29    0.604897
2011-05-31    1.415689
2011-06-30   -0.237188
2011-07-29   -0.197657
2011-08-31   -0.935760
2011-09-30    2.060165
2011-10-31    0.618824
2011-11-30    1.670747
2011-12-30   -1.690927

然后,您可以使用

根据索引周选择一些时间序列
ts[(ts.index.week > 3) & (ts.index.week < 10)]

具体而言,如果你想获得这个系列的平均值,你可以做到

ts[(ts.index.week > 3) & (ts.index.week < 10)].mean()

如果您使用数据框,则可能需要先选择该列:

df[(df.index.week > 3) & (df.index.week < 10)]['someColumn'].mean()

滚动窗口操作

现在,如果您想将滚动统计数据运行到时间序列索引的pandas对象上,请查看this part of the manual

鉴于我有一个月度时间序列,说我想要3个月的平均值,我会这样做:

rolling_mean(ts, window=3)
Out[25]: 
2011-01-31         NaN
2011-02-28         NaN
2011-03-31    0.308331
2011-04-29    0.391064
2011-05-31    1.134319
2011-06-30    0.594466
2011-07-29    0.326948
2011-08-31   -0.456868
2011-09-30    0.308916
2011-10-31    0.581076
2011-11-30    1.449912
2011-12-30    0.199548