python - 获取 pandas 数据框的最后 N 个工作日的平均值

标签 python pandas time-series

假设我的数据是每日计数,并且有一个 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/

相关文章:

python - 简单分组的奇怪结果

python - Pandas groupby 和rolling 返回不同的结果

r - 如何使用循环在多个站点上执行 Mann-kendall 测试?

python - 全局安装 Python-docx 的正确位置

python - 从python中的类调用函数

python - 使用 channel 制作聊天应用程序时无法理解如何根据聊天室名称定义组名称

python - 根据日期列范围将列添加到数据框

python - 修改按位 Karatsuba 算法以处理负数的最佳方法是什么?

python - 以正确的方式更新 Pandas Dataframe 中的列值

r - 在 R 中向自动绘图添加线条