熊猫-提取N个先前值并创建非系列矩阵

时间:2020-09-06 17:59:36

标签: python pandas

假设我有这个系列:

S = pd.Series([1,1,2,3,5,8,13,21,34])

我想将其转换为矩阵,其中每行将包含最后的N(比方说:5)值。

所以输出应该是:

[[NaN,NaN,NaN,NaN,NaN],
 [NaN,NaN,NaN,NaN, 1],
 [NaN,NaN,NaN, 1,  1],
 [NaN,NaN, 1,  1,  2],
 [NaN, 1,  1,  2,  3],
 [ 1,  1,  2,  3,  5],
 [ 1,  2,  3,  5,  8],
 [ 2,  3,  5,  8,  13],
 [ 3,  5,  8,  13, 21]]

我尝试使用rolling,但没有弄清楚如何获得预期的结果。

2 个答案:

答案 0 :(得分:1)

const viewRef = useRef(null as View | null) useEffect(() => { if (viewRef.current) { // TODO: base calculations off of measure console.log(viewRef.current.measure) } }, [viewRef.current]) ... return ( <View ref={(view) => (viewRef.current = view)} ... {children} </View> ) shift

concat

答案 1 :(得分:0)

numpypandas的组合

n = 5
a = [np.nan] + S.tolist()
a_out = np.flip(pd.DataFrame([a[:-i][::-1] for i in range(1,n+1)]).to_numpy(), 
                (0,1)).T
    
Out[464]:
array([[nan, nan, nan, nan, nan],
       [nan, nan, nan, nan,  1.],
       [nan, nan, nan,  1.,  1.],
       [nan, nan,  1.,  1.,  2.],
       [nan,  1.,  1.,  2.,  3.],
       [ 1.,  1.,  2.,  3.,  5.],
       [ 1.,  2.,  3.,  5.,  8.],
       [ 2.,  3.,  5.,  8., 13.],
       [ 3.,  5.,  8., 13., 21.]])

或者纯粹是pythonnumpy

n = 5
a = S.tolist()
a_out = np.flip([a[:-i][::-1] + [np.nan]*i for i in range(1,n+1)], (0,1)).T

Out[476]:
array([[nan, nan, nan, nan, nan],
       [nan, nan, nan, nan,  1.],
       [nan, nan, nan,  1.,  1.],
       [nan, nan,  1.,  1.,  2.],
       [nan,  1.,  1.,  2.,  3.],
       [ 1.,  1.,  2.,  3.,  5.],
       [ 1.,  2.,  3.,  5.,  8.],
       [ 2.,  3.,  5.,  8., 13.],
       [ 3.,  5.,  8., 13., 21.]])