首页 > 解决方案 > 计算公式,其中一行与熊猫中所有其他行的差异之和

问题描述

我有一个数据框

value    | count
-----------------
1.8      |  3
1.7      |  2
6.3      |  7
8.4      |  3

我想创建一个新列,其中每一行i都有值

sum(count[i]*count[j]*(value[i]-value[j])**2,{sum over j where j>i})

wherej跨越索引大于 row 的所有行i

如果我提取值列表,values = [1.8, 1.7, 6.3, 8.4]我可以评估(value[i]-value[j])**2 for j>i

def f(m):
    return sum([(values[m] - x)**2 for x in values[m:]])

[f(m) for m in range(len(values))][:-1]

但我找不到在熊猫中实现整个公式的方法,因为还涉及第二列的值。有人可以帮助我吗?

给定上面的数据框,预期的列将具有值 [92.61, 817.35, 565.58, 0]

标签: pythonpandaslambda

解决方案


让我们做numpy广播

v=df.value.values
c=df['count'].values
np.sum(np.tril(c*c[:,None]*((v-v[:,None])**2),-1).T,1)
array([817.35, 565.58,  92.61,   0.  ])

推荐阅读