微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

假设我的数据是每日计数,并将DateTimeIndex列作为其索引.有没有办法获得过去n个工作日的平均值?例如,如果日期是8月15日星期日,我想得到统计数字(星期日8月8日,星期日8月1日,……).

我昨天开始使用大熊猫,所以这就是我的强奸.

# 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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐