大熊猫的Ewma,但每周数据滚滚而来。

时间:2015-08-17 14:39:23

标签: python pandas

我正在尝试以“每周滚动”的方式计算大熊猫中的ewma。 例如,我们今天就是星期二。那么今天的ewma将仅使用周二数据来计算。 (本周二,前一个星期二,前一个等等)。 明天我们将不得不做同样的事情,但周三等等等等。 在这样做之后,如果我想得到一个“滚动的每周ewma”,其中包括一周中的每一天,我需要组合生成的每个向量。意思是每周只有星期一的ewma,只有周二的每周ewma,只有星期三的每周ewma,然后是星期四和星期五。周四。 现在,这个组合的矢量(每天)是我正在谈论的“滚动的每周ewma”。

大熊猫不是有嵌入式的做法吗? 目前我就是这样做的:

import pandas as pd
import numpy as np

df  = pd.DataFrame(np.random.randn(1000,1),index=pd.date_range(pd.datetime(1995,3,30), freq='B', periods=1000),columns =['PX_LAST'] )

lista1 = ['mon','tue','wed','thu','fri']
lista4 = ['W-MON','W-TUE','W-WED','W-THU','W-FRI']

for x,y in zip(lista1,lista4):
    r = "{0} = pd.ewma(df.PX_LAST.resample('{1}'),span = 10)".format(x,y)
    exec r   

comb2 = mon.combine_first(tue)
for y in lista1[1:6]:
    w  = "comb2 =comb2.combine_first({0})".format(y)
    exec w
df['emaw'] = comb2

1 个答案:

答案 0 :(得分:1)

可能有多种方法可以做到这一点,但我这样做的方法是减少。

您可以使用此列表理解来重新采样EWMA调用,以提供DataFrames列表:

ewmas = [pd.ewma(df[['PX_LAST']].resample(w), span=10) for w in lista4]

然后我们想将它们混合在一起,所以我们可以这样做:

ewma_frame = reduce(pd.DataFrame.combine_first, ewmas)

最后将它们连接回原始框架:

df.merge(ewma_frame, left_index=True, right_index=True)

只是一个单行,它是:

df.merge(reduce(pd.DataFrame.combine_first, [pd.ewma(df[['PX_LAST']].resample(w), span=10) for w in lista4]), left_index=True, right_index=True)

,如果您在代码之后运行它,它看起来会提供与原始方法相同的值(使用不同的列标题可以重命名)。