我需要计算DataFrame中某一列的平均值,要求每行的平均值计算时排除该行的值。
我知道可以通过索引迭代每一行,每次迭代时删除对应的行,然后计算平均值。我想知道是否有更高效的方法来实现这一点。
回答:
因此,mean
是 sum/size
,所以你可以从所有值的sum
中减去该列的值,然后除以DataFrame
的长度减1
:
df = pd.DataFrame({'a':[1,2,3,4]})#慢,仅适用于唯一值df['b'] = df['a'].apply(lambda x: df.loc[df.a != x, 'a'].mean())#更快df['b1'] = (df['a'].sum() - df['a']) / (len(df) - 1)print (df) a b b10 1 3.000000 3.0000001 2 2.666667 2.6666672 3 2.333333 2.3333333 4 2.000000 2.000000