-1
我有以下列表:移动窗口和积计算的Python
a= [1,2,3,4,5,6,7,8,9,10,11,12]
wts= [0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.10,0.10,0.30]
期望的结果是
result = [8.2,7.76,7.848,7.9504,8.179253333,8.420282667,8.628383467,8.790601973,8.894139057,8.930025594,8.891166196,8.770706404]
结果列表“a”和列表“WTS的移动窗口和积”。
例如结果8.2由代码
sum(map(lambda xi, yi: xi * yi,x,wt))
结果由通过追加8.2到列表“A”而获得的一个新的窗口得到的获得。
新列表a应该是从上面的结果中追加结果的地方。
a = [1,2,3,4,5,6,7,8,9,10,11,12,8.2]
现在计算的结果列表即结果的下一个值[1] = 7.76,它应该是
a = [2,3,4,5,6,7,8,9,10,11,12,8.2] and
wts = [0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.055555556,0.10,0.10,0.30]
的SUMPRODUCT的'WTS名单是固定的,只列表“一”将会移动窗口,新的结果会被附加到a.Anython的任何脚本来实现这一点将会很有帮助。
基于下面,我将下面的函数应用于数据框。您能否介绍一下我如何将这个函数应用到基于多个组的数据框上(基于Groupby)。
def wma(Curr,wts):
Curr.values.tolist()
wts.values.tolist()
len_list = len(Curr)
# Create a fixed sized queue
q = deque(maxlen=len_list)
# Add list a to q
q.extend(Curr)
i = 0
result = []
while i < len(a):
val = sum([x*y for x, y in zip(q, wts)])
q.append(val)
result.append(float(round(val, 2)))
i += 1
return result
例如,我有一个数据框有5列,即(列A,列B,列C,权重,当前)。类型错误:unhashable类型:“名单”我用下面的代码
s1 = s1.groupby(['Column A', 'Column B', 'Column C']).apply(wma(df['Current'],df['Weights']))
我收到以下错误应用上述功能。任何帮助都会有很大的帮助。
感谢这个答复。这个Deque是我今天学到的一个新概念。 – ceeka9388
@ ceeka9388,它也可以使用'list'来完成,它只需要从'0'位置'流行'和'追加''val',但是使用'queue'要快得多。 – JkShaw
我需要一些帮助,将其应用于数据框作为函数。任何建议在这里都会有很大的帮助。 – ceeka9388