根据三角数列将 Pandas Dataframe 拆分为多个 Dataframe

Split a Pandas Dataframe into multiple Dataframes based on Triangular Number Series

我有一个 DataFrame (df),我需要根据列号将它分成 n 个 Dataframes。但是,它必须遵循三角系列模式:

df1 = df[[0]]
df2 = df[[1,2]] 
df3 = df[[3,4,5]]
df4 = df[[6,7,8,9]]

等等

考虑数据框 df

df = pd.DataFrame(
    np.arange(100).reshape(10, 10),
    columns=list('ABCDEFGHIJ')
)

df

    A   B   C   D   E   F   G   H   I   J
0   0   1   2   3   4   5   6   7   8   9
1  10  11  12  13  14  15  16  17  18  19
2  20  21  22  23  24  25  26  27  28  29
3  30  31  32  33  34  35  36  37  38  39
4  40  41  42  43  44  45  46  47  48  49
5  50  51  52  53  54  55  56  57  58  59
6  60  61  62  63  64  65  66  67  68  69
7  70  71  72  73  74  75  76  77  78  79
8  80  81  82  83  84  85  86  87  88  89
9  90  91  92  93  94  95  96  97  98  99

i_s, j_s = np.arange(4).cumsum(), np.arange(1, 5).cumsum()

df1, df2, df3, df4 = [
    df.iloc[:, i:j] for i, j in zip(i_s, j_s)
]

验证

pd.concat(dict(enumerate([df.iloc[:, i:j] for i, j in zip(i_s, j_s)])), axis=1)

    0   1       2           3            
    A   B   C   D   E   F   G   H   I   J
0   0   1   2   3   4   5   6   7   8   9
1  10  11  12  13  14  15  16  17  18  19
2  20  21  22  23  24  25  26  27  28  29
3  30  31  32  33  34  35  36  37  38  39
4  40  41  42  43  44  45  46  47  48  49
5  50  51  52  53  54  55  56  57  58  59
6  60  61  62  63  64  65  66  67  68  69
7  70  71  72  73  74  75  76  77  78  79
8  80  81  82  83  84  85  86  87  88  89
9  90  91  92  93  94  95  96  97  98  99

首先获取三角数列,然后将其应用到dataframe

n = len(df.columns.tolist())
end = 0
i = 0
res = []
while end < n:
 begin = end
 end = i*(i+1)/2
 res.append(begin,end)

idx = map( lambda x:range(x),res)
for i in idx:
 df[i]