如何使用 Python 创建一个循环来计算每个时间序列子样本序列的均值?
How do I create a Loop using Python that calculates means for each timeseries subsample sequence?
我正在尝试创建一个将时间序列和多个拆分作为参数的函数。如果 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 输出到一个单独的列表对象中。
关键是你忘了指定每个切片的start。
顺便说一句,您不需要将此作为 PANDAS 系列进行;一个简单的列表就可以了
更改中心线以开始切片:
result2 = sum(ts[result*(j-1):result*j]) / result
输出:
[5.4, 3.0, 7.8]
Prune 成功修复了您的代码,但我忍不住要分享一个不同的解决方案。向 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))
我正在尝试创建一个将时间序列和多个拆分作为参数的函数。如果 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 输出到一个单独的列表对象中。
关键是你忘了指定每个切片的start。 顺便说一句,您不需要将此作为 PANDAS 系列进行;一个简单的列表就可以了
更改中心线以开始切片:
result2 = sum(ts[result*(j-1):result*j]) / result
输出:
[5.4, 3.0, 7.8]
Prune 成功修复了您的代码,但我忍不住要分享一个不同的解决方案。向 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))