首页 > 解决方案 > 如何将连续的行与它们之间越来越多的重叠结合起来(就像滚动窗口一样)?

问题描述

我目前正在开始学习 Pandas 并努力完成一项任务。我想要做的是通过组合两个连续的行来增加存储在数据框中的数据,并且它们之间的重叠越来越多。就像一扇滚动的窗户。

我相信这个问题可以用这个小数据框来举例说明:

df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]], columns=['A', 'B', 'C', 'D'])

这使:

    A   B   C   D
0   1   2   3   4
1   5   6   7   8
2   9   10  11  12

有了它,我想要完成但我不知道如何完成的是一个像下一个这样的数据框:

    A   B   C   D
0   1   2   3   4
1   2   3   4   5
2   3   4   5   6
3   4   5   6   7
4   5   6   7   8
5   6   7   8   9
6   7   8   9   10
7   8   9   10  11
8   9   10  11  12

就好像我们在每对初始数据帧之间使用多个滚动窗口一样。请注意,我没有使用这个特定的数据框(这些值并没有像 1、2、3、4 那样真正排序...)。我使用的是从 csv 导入的通用数据框。

这可能吗?提前谢谢!


编辑

感谢所有的回复。anky 和 ​​Shubham Sharma 给出的两个答案都很完美。这是通过将它们与我的真实数据框一起使用而获得的结果:

初始数据框 在此处输入图像描述

根据我的问题添加多个滚动窗口后 在此处输入图像描述

标签: pythonpandasdata-augmentation

解决方案


可能不那么优雅,但尝试:

def fun(dataframe,n):
    l = dataframe.stack().tolist()
    return (pd.DataFrame([l[e:e+n] for e,i in enumerate(l)],
        columns=dataframe.columns).dropna().astype(dataframe.dtypes))

fun(df,df.shape[1])

   A   B   C   D
0  1   2   3   4
1  2   3   4   5
2  3   4   5   6
3  4   5   6   7
4  5   6   7   8
5  6   7   8   9
6  7   8   9  10
7  8   9  10  11
8  9  10  11  12

推荐阅读