首页 > 解决方案 > 如何在熊猫数据框中创建计算的新列,该计算发生在除计算将进入的行之外的每一行

问题描述

例如,假设我得到了具有系列 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)))

在处理庞大的数据集时,我必须完全避免循环并以熊猫式的方式进行。

标签: pythonpandasdrop

解决方案


尝试:

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

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

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

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

结果和上面一样。


推荐阅读