2017-06-01 34 views
1

我有一个数据框(df),我需要根据列号将其拆分为n个数据框。但是,它必须遵循三角系列赛模式:将熊猫数据帧拆分为基于三角形数字系列的多个数据框

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

+0

你可以发布一些示例数据?你也可以让我们知道你已经尝试过什么吗?并且对于每个数据帧,列的数量应该比上一个长1个?你有多少列?如果你添加更多的细节,它会帮助我们,帮助你:) – MattR

回答

0

考虑数据框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 
0

首先得到三角号系列,然后将它应用于数据帧

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] 
相关问题