【发布时间】:2021-01-26 23:22:34
【问题描述】:
我希望在列表上实现滚动窗口,但不是固定长度的窗口,而是提供滚动窗口列表:
像这样的:
l1 = [5, 3, 8, 2, 10, 12, 13, 15, 22, 28]
l2 = [1, 2, 2, 2, 3, 4, 2, 3, 5, 3]
get_custom_roling( l1, l2, np.average)
结果是:
[5, 4, 5.5, 5, 6.67, ....]
6.67 是 3 个元素 10、2、8 的平均值。
我实现了一个缓慢的解决方案,欢迎提出每一个想法来让它更快:):
import numpy as np
def get_the_list(end_point, number_points):
"""
example: get_the_list(6, 3) ==> [4, 5, 6]
example: get_the_list(9, 5) ==> [5, 6, 7, 8, 9]
"""
if np.isnan(number_points):
return []
number_points = int( number_points)
return list(range(end_point, end_point - number_points, -1 ))
def get_idx(s):
ss = list(enumerate(s) )
sss = (get_the_list(*elem) for elem in ss )
return sss
def get_custom_roling(s, ss, funct):
output_get_idx = get_idx(ss)
agg_stuff = [s[elem] for elem in output_get_idx]
res_agg_stuff = [ funct(elem) for elem in agg_stuff ]
res_agg_stuff = eiu.pd.Series(data=res_agg_stuff, index = s.index)
return res_agg_stuff
【问题讨论】:
-
您如何知道要使用列表 1 中的哪些元素?
-
List2 给出了要使用的元素数量,比如 list2 的第 5 个元素是 3,所以返回列表的第 5 个元素将是:list1 [10, 2, 8] 中子列表/窗口的平均值.与
pd.Series.rolling(windows=...)相同的行为,windows 是一个函数而不是一个固定的数字
标签: python pandas rolling-computation