【问题标题】:Trying to create a function in python to create multiple subsets of a dataframe by row index [duplicate]尝试在python中创建一个函数以按行索引创建数据帧的多个子集[重复]
【发布时间】:2019-12-10 09:58:58
【问题描述】:

我有一个包含 15000 个唯一 Series_Id 的列的数据集。我想创建每个有 200 行的数据框的子集,并将其存储为单独的数据框。所以一共有75个数据集。

我只是想不出如何解决这个问题。我可以做到这一点的一种方法是通过行索引对 200 行的子集进行索引,但我必须这样做 75 次。

没有任何这样的代码。我正在尝试制作一个功能。

【问题讨论】:

    标签: python pandas function loops subset


    【解决方案1】:

    如果您想将每个子集存储为单独的数据帧,除了循环 75 次之外,我想不出任何其他方法。 如果我是你,我会遍历原始数据帧,一次抓取 200 行,并将其作为数据帧存储在字典中,作为值,其键将是循环号。 如下所示:

    dict_subsets = {}
    for i in range(0, (15000/200)):
        row_start = i * 200
        row_end = row_start + 200
        df_curr = df_original.loc[row_start:row_end]
        dict_subsets['df_' + str(i)] = df_curr
    

    【讨论】:

    • 这对我有用。非常感谢。我只需将 dict_subsets['df_' + i] = df_curr 更改为 dict_subsets['df_' + str(i)] = df_curr 因为它一直给我一个错误 cannot join str and int object
    • 我的错,当然应该是 str(i)。
    • 为将来提及它的任何人编辑了我的原始回复。 @RohanJain 如果您觉得这对您的问题有所帮助,请投票。
    【解决方案2】:

    您也许可以使用numpy.split,因为pandas DataFrame 大多只是numpy 数组:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
    print(df)
    #    x  y
    # 0  1  4
    # 1  2  5
    # 2  3  6
    n = 3  # 200 for you
    for df2 in np.split(df, n):
        print(df2)
    #    x  y
    # 0  1  4
    #    x  y
    # 1  2  5
    #    x  y
    # 2  3  6
    

    它试图使每个块的大小相同。如果无法进行这样的拆分,则会引发错误。您可以通过手动添加空行(包含 NaN 或类似内容)或将其切成 200 的倍数来避免这种情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2023-01-12
      • 2023-03-24
      • 2022-08-06
      • 1970-01-01
      相关资源
      最近更新 更多