首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Python创建一个循环,计算每个timeseries子示例序列的平均值?

如何使用Python创建一个循环,计算每个timeseries子示例序列的平均值?
EN

Stack Overflow用户
提问于 2019-11-12 21:51:06
回答 2查看 37关注 0票数 0

我正在尝试创建一个函数,它使用一个时间序列和几个分裂作为参数。如果拆分=3,则函数会将时间序列数据拆分为三分之二,并计算每个拆分的平均值。下面我创建的代码累计计算平均值。以下是示例数据:

代码语言:javascript
复制
data = pd.Series([1,2,3,4,5,6,7,8,9,9])

下面是我创建的函数:

代码语言:javascript
复制
def multi_mean(ts, n_splits = 3):
    ts_ranges = []
    mn_range = []
    for i in range(1,n_splits+1):
        result = int(round(len(ts)/(i),0))
        for j in range(1,i+1):
            result2 = ts[:result*j].mean()
            mn_range.append(result2)         
    return mn_range

假数据上的函数提供了以下结果列表:

代码语言:javascript
复制
rs1 = multi_mean(data,2)
[5.4,3.0,5.4]

第一个数字用于I =1的拆分,这是整个示例。第二个数字是i= 2的第一个平均值,这是前5个数字的平均值。I =2的第二个数字是所有数字的平均值。我不知道如何在循环中构造切片,以便得到所需的结果。我希望取得以下预期结果:

代码语言:javascript
复制
[5.4,3.0,7.8]

最后,理想情况下,我希望将每一轮I输出到一个单独的list对象中。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-12 22:04:03

关键的部分是您忘记指定每个片的开始。顺便说一句,你不需要像熊猫系列那样这样做,一个简单的列表就可以了。

将中心线更改为开始到切片:

代码语言:javascript
复制
    result2 = sum(ts[result*(j-1):result*j]) / result

输出:

代码语言:javascript
复制
[5.4, 3.0, 7.8]
票数 1
EN

Stack Overflow用户

发布于 2019-11-12 22:28:29

Prune成功地修复了您的代码,但是我无法抗拒共享一个不同的解决方案。万岁NumPy!

代码语言:javascript
复制
import numpy as np
import itertools as itt

arr_1 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 9])


def split_means(arr, num_splits):
    means_gen = ((curr_slice.mean() for curr_slice in np.array_split(arr, i)) for i in range(1, num_splits + 1))
    means_iter = itt.chain.from_iterable(means_gen)
    return list(means_iter)


print(split_means(arr_1, 2))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58827227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档