如何在计算的 pandas 数据框中创建新列,该计算发生在除计算将进入的行之外的每一行

How to create new column in pandas dataframe of a calculation that happens to every other row except the one where the calculation will go into

例如,假设我得到了 A.1 和 A.2 系列的数据帧 df,如下所示:

A.1    A.2
2      8
3      2
5      1

我想计算一下所有其他行的平均值的差异,如下所示:

A.1    A.2    B
2      8      (3+5)/2 - (2+1)/2
3      2      (2+5)/2-(8+1)/2
5      1      (2+3)/2-(8+2)/2

我的代码是这样的,怎么写才正确?

df['B'] = mean(df['A.1'].drop(df['B'].index)))-mean(df['A.2'].drop(df['B'].index)))

我必须完全避免循环,并以熊猫式的方式来处理,因为我正在处理巨大的数据集。

尝试:

df.apply(lambda r : df.loc[df.index!=r.name,'A.1'].mean() - df.loc[df.index!=r.name,'A.2'].mean(), axis = 1)

结果集是:

0    2.5
1   -1.0
2   -2.5
dtype: float64

请注意,lambda 函数中的 r.name 只是当前行的索引。

另一种完全没有 lambda 的方法:

(df['A.1'].sum()-df['A.1'])/(len(df)-1) - (df['A.2'].sum()-df['A.2'])/(len(df)-1)

结果同上