我有一个 Pandas 数据框,有 51034 行和 10 列。我想根据包含要切片的行的列表将此数据帧分割成 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
我不确定如何使用较大数据帧的切片来创建较小的数据帧。
关于如何实现这一目标有什么建议吗?
谢谢。
罗德里戈
最佳答案
您可以使用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
关于python - 在 Pandas 中将数据帧子集为多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30205628/