【问题标题】:Subsetting Data Frame into Multiple Data Frames in Pandas在 Pandas 中将数据框子化为多个数据框
【发布时间】:2015-07-24 04:45:11
【问题描述】:

我有一个 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

我不确定如何使用切片较大的数据帧来创建较小的数据帧。

对如何实现这个目标有什么建议吗?

谢谢。

罗德里戈

【问题讨论】:

    标签: python list pandas dataframe


    【解决方案1】:

    你可以使用groupby一个简单的index-to-group映射函数,假设索引是连续的并且从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
    

    【讨论】:

    • 谢谢 YS-L。我还没有弄清楚的一件事是,不是打印子集数据框,而是如何为每个子集创建新的数据框变量?
    • 您可以将子集 DataFrames 分配给一些变量,或者将它们放在字典或列表中。它们是原始 DataFrame 的一部分的副本。
    猜你喜欢
    • 2013-02-28
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多