【问题标题】:Calculating max/min for every n rows of dataframe in python计算python中每n行数据帧的最大值/最小值
【发布时间】:2020-05-21 08:53:07
【问题描述】:

我想计算 df 的每 n 行的最小值/最大值,比如 10,但是使用 df.rolling(10).max() 会给出 0-9、1-10、2-11 行的值等等。我想要 0-9、10-19、20-29 等等

对于大型数据集是否有一种简洁的方法?

谢谢

【问题讨论】:

    标签: python pandas dataframe max min


    【解决方案1】:

    成功的关键是按 np.arange(len(df.index)) // 10 分组(或更改 10(组大小)到您需要的任何其他值)。

    假设您有 3 列来计算最小值/最大值(['A', 'B', 'C']), 你可以运行:

    df.groupby(np.arange(len(df.index)) // 10)[['A', 'B', 'C']].agg(['min', 'max'])
    

    【讨论】:

    • 这是我的解决方案,将 len(df) 更改为 len (df.index) 请不要复制解决方案
    • 我们的解决方案相隔仅 3 分钟,因此没有人可以声称我只是复制了您的解决方案。另一方面,我包含了计算所有所需函数的代码,而不仅仅是max()。
    【解决方案2】:

    使用np.arange 计算0 到len (df) -1 的数组,然后计算整个除法。我们可以将此数组与DataFrame.groupby 一起使用。

    n=9
    df.groupby(np.arange(len(df))//n).max()
    

    示例

    设置

    df=pd.DataFrame({'A':range(30)})
    print(df)
         A
    0    0
    1    1
    2    2
    3    3
    4    4
    5    5
    6    6
    7    7
    8    8
    9    9
    10  10
    11  11
    12  12
    13  13
    14  14
    15  15
    16  16
    17  17
    18  18
    19  19
    20  20
    21  21
    22  22
    23  23
    24  24
    25  25
    26  26
    27  27
    28  28
    29  29
    

    解决方案

    n=9
    df_max = df.groupby(np.arange(len(df))//n).max()
    print(df_max)
        A
    0   8
    1  17
    2  26
    3  29
    

    如您所见,创建了从 0 到 m 列出的组。生成的 DataFrame 是每组的最大值。


    您也可以选择列来计算max

    df.groupby(np.arange(len(df))//n)[cols].max()
    

    如果你想使用多个功能,当然可以使用groupby.agg

    详情

    np.arange(len(df))//n
    #array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,
    #       2, 2, 2, 2, 2, 3, 3, 3])
    

    编辑

    first_row = 2
    df2 = df[first_row:]
    df2.groupby(np.arange(len(df2))//n).max()
    

    【讨论】:

    • 这很好用!有没有办法抵消它,所以第一行可以是任何行?
    • 是的,检查编辑部分
    猜你喜欢
    • 2021-01-25
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2021-01-15
    • 2020-10-26
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多