如何使用Python创建一个循环来计算每个timeseries子样本序列的平均值?

如何使用Python创建一个循环来计算每个timeseries子样本序列的平均值?,python,pandas,loops,list-comprehension,nested-loops,Python,Pandas,Loops,List Comprehension,Nested Loops,我正在尝试创建一个函数,它以一个时间序列和几个分割作为参数。如果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_spli

我正在尝试创建一个函数,它以一个时间序列和几个分割作为参数。如果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输出到一个单独的列表对象中。

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

将中心线更改为切片的起点:

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

[5.4, 3.0, 7.8]

Prune成功地修复了您的代码,但我忍不住分享了不同的解决方案。万岁

将numpy导入为np
将itertools作为itt导入
arr_1=np.数组([1,2,3,4,5,6,7,8,9,9])
def分割表示(arr、num分割):
表示范围(1,num\u splits+1)中i的当前切分(arr,i))的当前切分((curr\u slice.mean())
平均值=itt.chain.from(平均值)
返回列表(表示返回)
打印(拆分意味着(arr_1,2))

为什么当n_splits=2时,你的答案中有3个数字?我想要一系列的分割。所以split=2实际上是两轮分割。第一轮是整个样本。第二轮将数据分成两半。如果余数不是完全可除的,那么你将如何处理余数,比如10/3,你可以对你要做的事情进行更多的扩展吗?你为什么要用Pandas而不是NumPy呢?Prune解决了这个问题,但我也感谢你提供了这个解决方案,因为我也在努力学习函数式编程