平均函数,不包括Pandas DataFrame中每行的值

时间:2016-10-02 16:56:00

标签: python pandas

是否有一种简单的方法来计算pandas DataFrame中每列的平均值以及每行排除的具体值?下面每行中的x标记要从计算中排除的每次迭代中的值:

    a    b                     a    b                    a    b
0   1    2                 0   x    x                0   1    2
1   2    4    first loop   1   2    4   second loop  1   x    x   etc.
2   3    6       --->      2   3    6     --->       2   3    6   --->
3   4    8                 3   4    8                3   4    8
4   5   10                 4   5   10                4   5   10
                           ____________              _____________
                   col_avg:  3.5  7.0        col_avg: 3.25  6.5

Using only 4 values at each iteration, as the "x" is excluded from data set

产生新的DataFrame

    a_x    b_x
0   3.5    7.0
1   3.25   6.5
2   3.0    6.0
3   2.75   5.5
4   2.5    5.0

由于

/ N

1 个答案:

答案 0 :(得分:3)

从第一步开始,让我们说我们对求和而不是计算平均值感兴趣。在这种情况下,除了当前的元素之外,我们将沿着每个col添加所有元素。查看它/解决它的其他方法是将每个col的所有元素相加并减去当前元素本身。因此,基本上我们可以使用df.sum(0)获取所有列的总和,并简单地从中减去df,保持轴 对齐。 Broadcasting将一次性完成所有cols的这些操作。

为了得到平均的第二步,我们简单地除以每个col的求和所涉及的元素数,即df.shape[0]-1

因此,我们将有一个矢量化解决方案,如此 -

df_out = (df.sum(0) - df)/float(df.shape[0]-1)

示例运行 -

In [128]: df
Out[128]: 
   a   b
0  1   2
1  2   4
2  3   6
3  4   8
4  5  10

In [129]: (df.sum(0) - df)/float(df.shape[0]-1)
Out[129]: 
      a    b
0  3.50  7.0
1  3.25  6.5
2  3.00  6.0
3  2.75  5.5
4  2.50  5.0

要将列名称设置为所需的名称,请执行:df_out.columns = ['a_x','b_x']

相关问题