附python量化代码 import pandas as pdimport numpy as npimport matplotlib.pyplot as pltdef _moving_average(df, period):wma_1 = df['Adj Close'].rolling(window=period//2).apply(lambda x: np.sum(x * np.arange(1, period
import pandas as pd def get_under_rolling(df,window,user,name):df[name] =df[user].iloc[::-1].rolling(window=window).apply(lambda x:x[0]).iloc[::-1]returndfif__name__ =='__main__':df= pd.DataFrame({'a':[1,2,3,4,5],'b':[2,3,4,5,6]})# 把b列向下取值作为新的c...
c=b.rolling(window=2).apply(lambdax:np.linalg.det(x)) 1. 2. 3. 4. 5. 6. 其实从上面的代码看起来很简单,想实现的就是对b进行滑动计算自定义函数 (window不一定非得是2,只是这里用了行列式函数,所以是2) 上面的代码肯定是运行不起来的,不然也不会费工夫写这篇博客了,其实解决问题的思路应该分成...
df的index是日期,有两列,分别是HS300日收益率,及指数y的日收益率#%%滚动回归y=df[['指数y_return']]#不得不用到的一个global变量,也就是回归的y#首先定义一下apply里要用到的函数defrolling_regression(df_x):#df_x是rolling取出来的回归的x,是一个50乘1的dfglobalyindex_x...
将其视作类滑窗函数的原因是,它们的功能可以用窗口大小为 n+1 的 rolling 方法等价代替 In [110]: s.rolling(3).apply(lambda x:list(x)[0]) # s.shift(2) Out[110]: 0 NaN 1 NaN 2 1.0 3 3.0 4 6.0 dtype: float64 In [111]: s.rolling(4).apply(lambda x:list(x)[-1]-list(x)[...
nan return decorated def panel_rolling_apply( df, time_col, id_col, value_col, window, apply_func, rolling_kargs={}, dropna=True, fillna_value=None, fillna_method='ffill', parallel=False, min_periods=None ): """面板数据转换成矩阵数据,rolling apply,然后再转换回面板数据。支持并行。"""...
我尝试对所有行使用 rolling.apply 函数,如下所示: df['new_col']= df[['Open']].rolling(2).apply(AccumulativeSwingIndex(df['High'],df['Low'],df['Close'])) 显示错误 或者 df['new_col']= df[['Open', 'High', 'Low', 'Close']].rolling(2).apply(AccumulativeSwingIndex) 仅传递...
除了支持聚合函数,通过rolling().apply()方法,还可以在移动窗口上使用自己定义的函数,实现某些特殊功能; 唯一需要满足的是,在数组的每一个片段上,函数必须产生单个值; 代码示例 # 自定义方法:求和后,除以100 df2.rolling(2, min_periods=1)["amount"].apply(lambda x: sum(x)/100, raw=False) ...
score_at_2percent = lambda x:percentileofscore(x,0.02) result = pd.rolling_apply(returns.AAPL,250,score_at_2percent) result.plot() plt.show() 9、性能和内存使用方面的注意事项 TimeSeries和Period都是以64位整数表示的(即NumPy的datetime64数据类型)。也就是说,对于每个数据点,其时间戳需要占用8字节...
import pandas as pd def get_under_rolling(df,window,user,name): df[name] = df[user].iloc[::-1].rolling(window=window).apply(lambda x:x[0]).iloc[::-1] return df if __name__ == '__main__': df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[2,3,4,5,6]}) # 把b列...