Python 平均函数,不包括数据帧中每行的值
是否有一种简单的方法来计算数据帧中每列的平均值,并排除每行的特定值?下面每行中的Python 平均函数,不包括数据帧中每行的值,python,pandas,Python,Pandas,是否有一种简单的方法来计算数据帧中每列的平均值,并排除每行的特定值?下面每行中的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
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
产生一个新的数据帧
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从第一步开始,假设我们感兴趣的是求和,而不是计算平均值。在这种情况下,我们将沿每个列添加除当前元素外的所有元素。另一种看待它/解决它的方法是将每个列上的所有元素相加,然后减去当前元素本身。因此,本质上我们可以用
df.sum(0)
得到所有列的和,然后简单地从中减去df
,保持轴不变
对齐的。将负责一次性完成所有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']
谢谢,效果很好!由于数据包含NaN值,“真”平均值需要使用df.count()而不是df_shape[0]来计算,否则我会将NaN值计算为实际值。不过,我在问题中没有具体说明,仅供参考。