【问题标题】:how to calculate the average of dataframe of batches?如何计算批次数据帧的平均值?
【发布时间】:2021-06-15 02:32:09
【问题描述】:

如何计算由批量 csv 文件创建的数据帧的平均值?

Input:
A,1
B,2
B,1
C,2
A,1
B,3
B,1
C,1
A,1
B,2
B,1
C,3  

我想将它们按 4 行(A、B、B、C)分组并计算第二列的平均值。

output:
A, average(1,1,1)
B, average(2,3,2)
B, average(1,1,1)
C, average(1,2,3)

【问题讨论】:

    标签: python pandas dataframe csv


    【解决方案1】:

    假设列被命名为label, value,因为您在固定数量的行上进行平均,所以重新整形就可以了:

    nrows=4
    
    pd.DataFrame({'label': df['label'].iloc[:nrows],
                  'value':df['value'].values.reshape(-1,nrows).mean(axis=0)
    })
    

    输出:

      label     value
    0     A  1.000000
    1     B  2.333333
    2     B  1.000000
    3     C  2.000000
    

    【讨论】:

    • 谢谢大家。很好的答案,但我不得不选择一个作为答案。
    • 如何选择另一列?这没有用。 pd.DataFrame({'label': df['label'].iloc[:nrows], 'status': df[;status'], 'value':df['value'].values.reshape(-1,nrows).mean(axis=0) })
    【解决方案2】:

    首先为每个单独的批次创建一个cumcount 级别,这样您就可以将第一个“B”与第二个“B”分开(假设“A”开始每个新组)。然后对字母和这个新创建的组标签进行分组。

    假设您的列标记为0 和1:

    import pandas as pd
    df = pd.read_clipboard(sep=',', header=None)
    
    df['gp'] = df.groupby([df[0].eq('A').cumsum(), 0]).cumcount()
    df.groupby([0, 'gp'])[1].mean()
    

    0  gp
    A  0     1.000000
    B  0     2.333333
       1     1.000000
    C  0     2.000000
    Name: 1, dtype: float64
    

    【讨论】:

      【解决方案3】:

      你可以像这样groupby他们然后计算平均值。

      df.groupby([df.index%4, df[0]], as_index=False).mean().rename(columns={0:'labels', 1:'mean'})
      

          labels  mean
      0   A       1.000000
      1   B       2.333333
      2   B       1.000000
      3   C       2.000000
      

      【讨论】:

        猜你喜欢
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-06
        • 2021-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多