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)[...
我尝试对所有行使用 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) 仅传递...
df.rolling(n).apply(lambda x: get_sort_value(x)/n) 由于pandas没有自带与rolling耦合的获取排序值的内置函数,我们需要使用apply+lambda的写法进而利用自写的get_sort_value去获取最后一个元素的排序值。根据我们的要求,get_sort_value是一个传入array返回最后一个元素排序值的函数,这里除以n则是为了正则化。
除了支持聚合函数,通过rolling().apply()方法,还可以在移动窗口上使用自己定义的函数,实现某些特殊功能; 唯一需要满足的是,在数组的每一个片段上,函数必须产生单个值; 代码示例 # 自定义方法:求和后,除以100 df2.rolling(2, min_periods=1)["amount"].apply(lambda x: sum(x)/100, raw=False) ...
#通过rolling_mean定义扩展平均expanding_mean =lambdax:rolling_mean(x,len(x),min_periods = 1)#对DataFrame调用rolling_mean(以及其他类似函数)会将转换应用到所有列上#下面的logy是将纵坐标显示为科学计数法,暂时搞不懂怎么变换的mean_60 = pd.rolling_mean(close_px,60).plot() ...
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列...
import randomrand = [random.randint(1, i) for i in range(100,110)]data = {}data["Sales"] = randdf = pd.DataFrame(data)weights = np.array([0.5, 0.25, 0.10])sum_weights = np.sum(weights)df['WMA']=(df['Sales'].rolling...