假设我的数据是每日计数,并且有一个 DateTimeIndex 列作为其索引。有没有办法获得过去 n 个工作日的平均值?例如,如果日期是 8 月 15 日星期日,我想计算(8 月 8 日星期日,8 月 1 日星期日,...)的计数平均值。
我昨天开始使用 pandas,所以这就是我强行使用的东西。
# df is a dataframe with an DateTimeIndex
# brute force for count last n weekdays, wherelnwd = last n weekdays
def lnwd(n=1):
lnwd, tmp = df.shift(7), df.shift(7) # count last weekday
for i in xrange(n-1):
tmp = tmp.shift(7)
lnwd += tmp
lnwd = lnwd/n # average
return lnwd
必须有一个类轮?有没有办法使用 apply()
(不传递具有 for 循环的函数?因为 n
是变量)或某种形式的 groupby
?例如,找到每个工作日所有数据的平均值的方法是:
df.groupby(lambda x: x.dayofweek).mean() # mean of each MTWHFSS
最佳答案
我认为您正在寻找滚动申请(在本例中为滚动平均值)?请参阅文档:http://pandas.pydata.org/pandas-docs/stable/computation.html#moving-rolling-statistics-moments .但是然后分别申请每个工作日,这可以通过组合 rolling_mean
来实现使用 groupby
在工作日进行分组。
这应该给出类似的东西(带有一系列 s
):
s.groupby(s.index.weekday).transform(lambda x: pd.rolling_mean(x, window=n))
关于python - 获取 pandas 数据框的最后 N 个工作日的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25694612/