是否有一种简单的方法来计算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
答案 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']
。