我有一个包含 N 列的宽数据框。列成对呈现,如下所示:前两列在一起,接下来的两列,直到数据框的末尾:
XS0552790049 Unnamed: 5583 XS0628646480 Unnamed: 5585
0 2010-10-22 100.0 2011-05-24 99.711
1 2010-10-25 100.0 2011-05-25 99.685
2 2010-10-26 100.0 2011-05-26 100.125
3 2010-10-27 100.0 2011-05-27 99.893
4 2010-10-28 100.0 2011-05-30 99.792
我想将此数据帧划分为 N/2 子集,每个子集包含一对相邻列,因此例如第一对将是
["XS0552790049","Unnamed: 5583"]
。
我考虑过使用 for 循环,但我肯定错过了一些东西,因为它不会生成子样本。也许我索引错误。
这是我的尝试:我尝试创建一个包含每个键的子样本的字典。
sub = {}
for i in range(0,len(df.columns)+1):
sub[i] = df.iloc[:,i:i+3]
我对 Python 还很陌生,所以欢迎提出任何建议。
列说明,供记录:
大多数情况下,您只是省略了
range(start, stop, step)
迭代器中的步骤,使用 step=2。
然后列表推导式在这种情况下有利地封装
for
循环:
dfs = [ df.iloc[:,[i,i+1]] for i in range(0, len(df.columns), 2) ]
(请注意,
[:,[i,i+1]]
或[:,i:i+2]]
确实返回相同的范围,因此可以相同地使用。)
这将返回您请求的成对子集列表:
dfs
[ XS0552790049 Unnamed: 5583
0 2010-10-22 100.0
1 2010-10-25 100.0
2 2010-10-26 100.0
3 2010-10-27 100.0
4 2010-10-28 100.0,
XS0628646480 Unnamed: 5585
0 2011-05-24 99.711
1 2011-05-25 99.685
2 2011-05-26 100.125
3 2011-05-27 99.893
4 2011-05-30 99.792]
dfs[0]
XS0552790049 Unnamed: 5583
0 2010-10-22 100.0
1 2010-10-25 100.0
2 2010-10-26 100.0
3 2010-10-27 100.0
4 2010-10-28 100.0
旁注: