Python 数据帧列的滚动梯度

Python 数据帧列的滚动梯度,python,pandas,gradient,rolling-computation,Python,Pandas,Gradient,Rolling Computation,如何使用另一列的渐变在数据帧中创建列 我希望梯度在滚动窗口上运行,因此一次只评估4个数据点 我假设是这样的: df['Gradient']=np.梯度(df['Yvalues'].滚动(中心=假,窗口=4)) 但是,这会产生错误: raise VALUERROR('值的长度与“”索引的长度不匹配') ValueError:值的长度与索引的长度不匹配 有什么想法吗 谢谢 从给定的信息可以看出,您没有为滚动窗口提供聚合函数 df['Gradient'] = np.gradient(df['Y

如何使用另一列的渐变在数据帧中创建列

我希望梯度在滚动窗口上运行,因此一次只评估4个数据点

我假设是这样的:

df['Gradient']=np.梯度(df['Yvalues'].滚动(中心=假,窗口=4))

但是,这会产生错误:

raise VALUERROR('值的长度与“”索引的长度不匹配')
ValueError:值的长度与索引的长度不匹配

有什么想法吗


谢谢

从给定的信息可以看出,您没有为滚动窗口提供聚合函数

df['Gradient'] = np.gradient(df['Yvalues'].rolling(center=False,window=4).mean())

您可以在此网站上阅读有关滚动功能的更多信息:
我想我找到了解决办法。虽然这可能不是最有效的


类行(对象):
定义初始化(自):
通过
定义日期索引到整数轴(self,dateindex):
d=[d.date()表示日期索引中的d]
天数=[(d[x]-d[x-1])。范围(0,len(d))内x的天数]
轴=np.总和(天)
轴=[x-轴中x的天数[0]
返回轴
def滚动(自身、X值、Y值、w):#滚动生成器功能#https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python
对于范围内的i(len(xvalue)+1-w):
产量X值[i:i+w],Y值[i:i+w]
def梯度(自身、X值、Y值):
#使用最小二乘法。
#返回两个数组向量的梯度(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.lstsq.html)
A=np.vstack([Xvalues,np.one(len(Xvalues))]).T
m、 c=np.linalg.lstsq(A,y值)[0]
返回m,c
def梯度_列(自身、数据、窗口):
“”“从数据帧(带有关联的“日期”索引)中提取单列内容”
vars=variables()
#获取“X”值
Xvalues=self.date\u index\u到\u integer\u轴(data.index)
Xvalues=np.asarray(Xvalues,dtype=np.float)
#获取“Y”值
Yvalues=np.asarray([val代表数据中的val],dtype=np.float)
Yvalues=np.asarray(Yvalues,dtype=np.float)
#计算滚动窗口“梯度”(“m”在Y=mx+c中)
Gradient_Col=[self.Gradient(sx,sy)[0]表示自滚动中的sx,sy(xvalue,yvalue,int(window))]
Gradient\u Col=np.asarray(Gradient\u Col,dtype=np.float)
nan_数组=np.empty([int(窗口)-1])
nan_数组[:]=np.nan
#在“渐变颜色”的开始处填充空格,使其与原始数据帧的长度相同(由于窗口的原因而较短)
渐变色=np.insert(渐变色,0,nan数组)
返回梯度
df['Gradient']=行。Gradient_列(df['operation Revenue',window=4)

请提供有关您的数据集的样本数据或统计数据,即数据点的数量等。数据点不多。例如,如果一个柱上有100 150 209 319 400,则相邻的柱上会有一个gradientHi@Bryce Ramgovind的滚动窗口。我不想要一个聚合函数。。。梯度应该是函数。我想要的是一次四行的滚动窗口。
df['Gradient'] = np.gradient(df['Yvalues'].rolling(center=False,window=4).sum())