用滚动窗口从数据框架创建 "缓冲 "矩阵?[英] Create "buffer" matrix from dataframe with rolling window?

本文是小编为大家收集整理的关于用滚动窗口从数据框架创建 "缓冲 "矩阵?的处理方法,想解了用滚动窗口从数据框架创建 "缓冲 "矩阵?的问题怎么解决?用滚动窗口从数据框架创建 "缓冲 "矩阵?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

给定一个只有一列的数据框,我如何将其转换为另一个数据框"缓冲区"(大小为 2),如下所述:

df =

   0
0  1
1  2
2  3
3  4
4  4
5  5
6  5

expected_buffer =

   0 1
0  1 2
1  2 3
2  3 4 
3  4 5

这是我的尝试:

def buff(df,past):
    arr1=df.values
    arr=arr1[0:past]
    for i in xrange(past,df.shape[0]-past+2):
        arr=np.append(arr,arr1[i:past+i],axis=0)
    return pd.DataFrame(arr)

返回以下内容:

   0
0  1
1  2
2  3
3  4
4  4
5  5
6  5

如何获得预期的buff输出?

编辑:past 我的意思是缓冲区大小.使用 MATLAB 表示法:我有 5 个元素的列向量

df = [1;2;3;4;5]

如果 past 为 2,我最终应该得到以下输出:

buff = [1 2; 2 3; 3 4; 4 5]

如果 past 是 3,那么预期的输出应该是

buff = [1 2 3; 2 3 4; 3 4 5]

如果 past 为 4,则预期输出为

buff = [1 2 3 4; 2 3 4 5]

所以对于 n-元素 df 和 past=m,我会得到一个大小为 (n-past+1)xpast 的矩阵.

推荐答案

def buff(df, past):
    a = np.concatenate([df.values[i:i-past] for i in range(past)], axis=1)
    return pd.DataFrame(a, columns=list(range(past)))
<小时>
buff(df, 2)

在此处输入图片描述

buff(df, 3)

在此处输入图片描述

buff(df, 4)

在此处输入图片描述

buff(df, 5)

在此处输入图片描述

本文地址:https://www.itbaoku.cn/post/1728207.html