我有一个拥有51034行和10列的Pandas数据帧。我想根据包含要切片的行的列表将此数据帧切割成158个较小的数据帧。
如何将pandas数据帧切割成较小的数据帧?
例如,如果我有一个包含10行和4列的数据框:
A B C D
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
3 13 14 15 16
4 17 18 19 20
5 21 22 23 24
6 25 26 27 28
7 29 30 31 32
8 33 34 35 36
9 37 38 39 40
此示例数据框将每2行进行一次切片,以创建5个新的较小数据帧:
DataFrame1:
A B C D
0 1 2 3 4
1 5 6 7 8
DataFrame2:
A B C D
0 9 10 11 12
1 13 14 15 16
DataFrame3:
A B C D
0 17 18 19 20
1 21 22 23 24
DataFrame4:
A B C D
0 25 26 27 28
1 29 30 31 32
DataFrame5:
A B C D
0 33 34 35 36
1 37 38 39 40
我不确定如何使用较大数据帧的切片来创建较小的数据帧。
有关如何实现这一目标的任何建议?
谢谢。
罗德里戈
答案 0 :(得分:2)
您可以将groupby
与简单的索引到组映射函数一起使用,假设索引是连续的并且从0开始:
for _, df_k in df.groupby(lambda x: x/2):
print df_k.reset_index(drop=True)
输出:
A B C D
0 1 2 3 4
1 5 6 7 8
A B C D
0 9 10 11 12
1 13 14 15 16
A B C D
0 17 18 19 20
1 21 22 23 24
A B C D
0 25 26 27 28
1 29 30 31 32
A B C D
0 33 34 35 36
1 37 38 39 40
如果您有一个表示切片位置的数字列表,您可以将字典作为组映射传递:
import numpy as np
slice_at = [3, 5]
group_sizes = np.diff([0] + slice_at + [len(df)])
mapping = dict(zip(df.index, np.repeat(range(len(group_sizes)), group_sizes)))
for _, df_k in df.groupby(mapping):
print df_k.reset_index(drop=True)
输出:
A B C D
0 1 2 3 4
1 5 6 7 8
2 9 10 11 12
A B C D
0 13 14 15 16
1 17 18 19 20
A B C D
0 21 22 23 24
1 25 26 27 28
2 29 30 31 32
3 33 34 35 36
4 37 38 39 40