我需要在一个精确的时代得到一个列的平均值(我将在我的函数的输入中设置):
在我的情况下,日期是索引,所以我可以得到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
但它真的很慢所以不应该是正确的方式
答案 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