如何使用3x3窗口将panda Dataframe 拆分为多个 Dataframe ?

utugiqy6  于 2021-09-08  发布在  Java
关注(0)|答案(1)|浏览(386)

我有一个Pandas数据框。我需要一个代码来使用3x3窗口将此 Dataframe 拆分为多个 Dataframe 。

import pandas as pd

d= {1: [5, 5, 5, 5, 4, 6,11,11], 3: [4, 5, 15, 25, 40, 10,25,33],6: [77, 47, 55, 59, 32,  5,9,22],
    7: [15, 21, 40, 33, 30, 6,14,14],9: [10, 11, 12, 45, 14, 15,13,76],15: [3, 5, 32, 12, 11, 12,17,45],18: [3, 6, 23, 22, 21, 32,19,65],23: [6, 3, 5, 8, 10, 12,4,2]} 

data_miss=pd.DataFrame(data=d)
data_miss.index=[1,3,4,8,10,25,32,40]

请参见下图作为示意图示例:

如上图所示,行和列索引不是按顺序编号的,我需要使用每个提取的 Dataframe 保存行和列索引(请参见图像下方的提取 Dataframe )。此外,代码应该能够考虑数据框的边框,即行或COL中所选数据框的大小小于3,窗口应该考虑它并且不面临错误。

sirbozc5

sirbozc51#

可以使用两次np.array\u split和双循环:一次拆分行,然后将已拆分的行上的列拆分为3行。


# get dataframe shape

i,c = data_miss.shape

# get all the 3x3 dataframes

l = [arr33 
     for arr3x in np.array_split(data_miss, c//3+1, axis=0) # 3 rows dataframes
     for arr33 in np.array_split(arr3x, i//3+1, axis=1) # 3x3 dataframes
]

# see for example some element of the list

print(l[0])

# 1   3   6

# 1  5   4  77

# 3  5   5  47

# 4  5  15  55

print(l[2]) # only 2 columns

# 18  23

# 1   3   6

# 3   6   3

# 4  23   5

print(l[-1]) # last 2x2 dataframe

# 18  23

# 32  19   4

# 40  65   2

相关问题