【问题标题】:DataFrames - Average ColumnsDataFrames - 平均列
【发布时间】:2021-01-06 12:30:14
【问题描述】:

我在 pandas 中有以下数据框

Column 1   Column 2  Column3   Column 4
   2           2         2         4
   1           2         2         3

我希望创建一个数据框,其中包含第 1 列和第 2 列、第 3 列和第 4 列等的平均值。

  ColumnAvg(12)      ColumnAvg(34)
      2                   3
      1.5                 1.5

我正在使用它,但它正在平均所有内容。

df.mean(axis=1)

有没有一种方法可以在平均每一行时添加列标题。 如果没有,另一种方法是创建两个数组,对它们进行平均,然后创建一个新的数据框。

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    您可以使用 groupbyaxis 并通过列表

    out = df.groupby([1,1,2,2],axis=1).mean()
         1    2
    0  2.0  3.0
    1  1.5  2.5
    

    【讨论】:

      【解决方案2】:

      您可以使用 groupby 并将其与 `//2' th 索引分组,这会将其分组为 2 列

        df.groupby((np.arange(len(df.columns)) // 2) + 1, axis=1).mean().add_prefix('ColumnAVg')
      

      从索引 2 开始,正如您在评论中提到的那样

       dfgrp=  df.iloc[:,2:].groupby((np.arange(len(df.iloc[:,2:].columns)) // 2) + 1, axis=1).mean().add_prefix('ColumnAVg')
       dfnew = pd.concat([df.iloc[:,2:],dfgrp])
      

      【讨论】:

      • 我喜欢这个答案,唯一的问题是 - 前两列不是数字。恰好 2 列需要从第 3 列开始。含义(索引 = 2)
      【解决方案3】:

      您将计算转移到 numpy 的想法很好,因为它允许多个列对:

      arr = df.to_numpy()
      # split into pairs
      split = np.split(arr, arr.shape[-1] // 2, axis=1)
      # get mean and create dataframe
      pd.DataFrame(np.mean(split, axis=0))
          0   1
      0   2.0 3.0
      1   1.5 2.5
      

      【讨论】:

        猜你喜欢
        • 2023-02-22
        • 2019-03-31
        • 1970-01-01
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多