我如何使用Python创建一个循环,为每个时间序列子样本序列计算均值?

问题描述 投票:0回答:2

我正在尝试创建一个将时间序列和多个拆分作为参数的函数。如果split = 3,我希望该函数将时间序列数据分成三等分并为每个拆分计算平均值。我在下面创建的代码累计计算平均值。这是示例数据:

data = pd.Series([1,2,3,4,5,6,7,8,9,9])

这是我创建的函数:

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

伪造数据上的函数提供以下结果列表:

rs1 = multi_mean(data,2)
[5.4,3.0,5.4]

第一个数字用于i = 1的分割,这是整个样本。第二个数字是i = 2的第一个平均值,它是前5个数字的平均值。i = 2的第二个数字取所有数字的平均值。我无法弄清楚如何在循环中构造切片,以便获得所需的结果。我想要以下预期结果:

[5.4,3.0,7.8]

最后,理想情况下,我希望将每个回合i输出到单独的列表对象中。

python pandas loops list-comprehension nested-loops
2个回答
1
投票

关键部分是您忘记指定每个切片的开始。顺便说一句,您不需要作为PANDAS系列来做;一个简单的列表就可以了

更改中心线以开始切片:

    result2 = sum(ts[result*(j-1):result*j]) / result

输出:

[5.4, 3.0, 7.8]

0
投票

修剪成功地修复了您的代码,但我无法抗拒共享其他解决方案。所有的冰雹NumPy!

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))
© www.soinside.com 2019 - 2024. All rights reserved.