首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些条件下,数据帧为每行拆分为多个数据帧

在某些条件下,数据帧为每行拆分为多个数据帧
EN

Stack Overflow用户
提问于 2020-12-21 22:03:54
回答 1查看 38关注 0票数 0

我有一个这样的数据帧。

代码语言:javascript
复制
A,B
1,2
3,4
5,6
7,8
9,10
11,12
13,14

我想在数据帧上拆分这部分。拆分的数据帧应该每三行包含一次。拆分的第一个数据帧可以包含从索引0到索引2。第二个包含从索引1到索引,依此类推。

代码语言:javascript
复制
A,B
1,2
3,4
5,6

A,B
3,4
5,6
7,8

A,B
5,6
7,8
9,10

诸若此类。

我一直在使用forloop,然后使用iloc,然后将这些拆分的dataframe添加到列表中。

我正在寻找是否有一些矢量化方法来在pandas中拆分上述数据帧。数据帧很大,使用forloop遍历每一行都很慢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-21 22:14:32

假设您有标准的RangeIndex索引,并借用了滚动窗口from here的矢量化方法,我们可以得到numpy的级别:

代码语言:javascript
复制
def rolling_window(a, window):
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window)
    strides = a.strides + (a.strides[-1],)
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides)

df.to_numpy()[rolling_window(df.index.values, 3)]

哪一项会产生

代码语言:javascript
复制
array([[[ 1,  2],
        [ 3,  4],
        [ 5,  6]],

       [[ 3,  4],
        [ 5,  6],
        [ 7,  8]],

       [[ 5,  6],
        [ 7,  8],
        [ 9, 10]],

       [[ 7,  8],
        [ 9, 10],
        [11, 12]],

       [[ 9, 10],
        [11, 12],
        [13, 14]]])

如果需要将它们作为数据框返回,只需使用构造函数和map

代码语言:javascript
复制
map(pd.DataFrame, df.to_numpy()[rolling_window(df.index.values, 3)])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65394175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档