******** 更新了问题,更好的代码示例,现在使用列表理解 **********
我正在尝试使用 pandas 和 talib 获得每周滚动的技术指标。
“每周滚动”的意思是,例如,如果今天是星期四,那么今天的 ADX 每周值将仅使用这个星期四、前一个星期四等来计算。每周 ADX 系列中之前的 ADX 仅使用星期三等计算。所以现在,一天过去了,我们站在星期五,应该只使用星期五来计算每周 ADX。最后,ADX 系列只是将所有这些 ADX 附加在一个系列中。
目前,我使用一个列表理解,它生成 5 个位于“adxs_list”内的列表,每个列表都是一周中的一天。例如,adxs_list[0] 显示仅在星期一计算的 talib.ADX 值,adxs_list[1] 显示仅在星期二计算的 talib.ADX 值,依此类推。
现在,当我试图将这些列表放回原始数据框中时,我被卡住了。试图将它们混合在一起,然后将它们添加到 DataFrame 但无法弄清楚......
所以问题是,我怎样才能将这些计算加入到尊重 df 索引的原始数据帧中?
import pandas as pd
import numpy as np
import talib
df = pd.DataFrame(np.random.randn(1000,4),
index=pd.date_range(pd.datetime(2000,3,30), freq='B', periods=1000),
columns =['PX_OPEN', 'PX_LAST', 'PX_HIGH', 'PX_LOW'] )
lista4 = ['W-MON','W-TUE','W-WED','W-THU','W-FRI']
adxs_list = [([talib.ADX(df['PX_HIGH'].resample(w).values,
df['PX_LOW'].resample(w).values, df['PX_LAST'].resample(w).values
, timeperiod=3)]) for w in lista4]
试图这样做:
adxs_frame = reduce(pd.DataFrame.combine_first,adxs_list)
并得到这个错误:
TypeError:必须使用 DataFrame 实例作为第一个参数调用未绑定的方法 combine_first()(改为获取列表实例)