从datafrom中获取列并由python用作数组

从datafrom中获取列并由python用作数组,python,pandas,Python,Pandas,我想将列从dataframe提取到数组中 然后将此数组中的新数组附加到原始数据帧 我的数据帧(df)是这样的 close per 0 637.0 -0.156740 1 638.0 0.789889 2 633.0 -1.555210 3 643.0 -1.832061 4 655.0 0.000000 然后我尝试从DataFrame中提取列并进行移动平均 newarray = pandas.rollling_mean(df.per,3)

我想将列从dataframe提取到数组中

然后将此数组中的新数组附加到原始数据帧

我的数据帧(df)是这样的

   close        per
0  637.0  -0.156740
1  638.0    0.789889
2  633.0   -1.555210
3  643.0   -1.832061
4  655.0    0.000000
然后我尝试从DataFrame中提取列并进行移动平均

newarray =  pandas.rollling_mean(df.per,3) ## fetch array
然后我想把它附加到原始数据

df[sma] = newarray
我最终想要得到的是这样的

   close    per       sma
0  637.0   -0.156740  636 
1  638.0    0.789889  638
2  633.0   -1.555210  643.6
3  643.0   -1.832061  nan 
4  655.0    0.000000  nan
然而,我认为数据帧和阵列之间存在某种融合

也许我是误会了


根据您的目标,我如何更正此问题

In [39]: df['sma'] = df.close.rolling(3).mean()

In [40]: df
Out[40]:
   close       per         sma
0  637.0 -0.156740         NaN
1  638.0  0.789889         NaN
2  633.0 -1.555210  636.000000
3  643.0 -1.832061  638.000000
4  655.0  0.000000  643.666667
或:


根据您的目标:

In [39]: df['sma'] = df.close.rolling(3).mean()

In [40]: df
Out[40]:
   close       per         sma
0  637.0 -0.156740         NaN
1  638.0  0.789889         NaN
2  633.0 -1.555210  636.000000
3  643.0 -1.832061  638.000000
4  655.0  0.000000  643.666667
或:


不适合初学者

from numpy.lib.stride_tricks import as_strided as strided

v = np.append(df.close.values, [np.nan] * 2)
s = v.strides[0]

df.assign(sma=strided(v, (v.size - 2, 3), (s, s)).mean(1))

   close       per         sma
0  637.0 -0.156740  636.000000
1  638.0  0.789889  638.000000
2  633.0 -1.555210  643.666667
3  643.0 -1.832061         NaN
4  655.0  0.000000         NaN

不适合初学者

from numpy.lib.stride_tricks import as_strided as strided

v = np.append(df.close.values, [np.nan] * 2)
s = v.strides[0]

df.assign(sma=strided(v, (v.size - 2, 3), (s, s)).mean(1))

   close       per         sma
0  637.0 -0.156740  636.000000
1  638.0  0.789889  638.000000
2  633.0 -1.555210  643.666667
3  643.0 -1.832061         NaN
4  655.0  0.000000         NaN

感谢它能工作,我需要根据平均周期将
shift(-1)
值更改为
Averageperiod/2-1
,所以这对我来说有点棘手。我需要了解
center=True函数的工作原理。感谢它的工作原理,我需要根据平均周期将
shift(-1)
值更改为
Averageperiod/2-1
,所以这对我来说有点棘手。我需要了解
center=True函数的工作原理。