python - 计算公式,其中一行与熊猫中所有其他行的差异之和
问题描述
我有一个数据框
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]
解决方案
让我们做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. ])
推荐阅读
- r - 将 googleway 输出保存为 html 以在线托管
- sql-server - ms sql 分组 2 小时
- android - Google Fit 身份验证的不同帐户选择
- javascript - mongoDB中的增量值
- java - Observable merge() 检测触发了哪个 observable
- php - Wordpress 儿童主题 - Shopisle 更改大标题
- oop - 存储库模式:泛型与多态的实现方式
- python - 在 obj+mtl+jpg 3D 文件中,如何获取将应用 jpg 文件中特定像素的 3D 坐标?
- c# - 在 C# 中使用 Powershell cmdlet 从 AzureAD 获取特定用户详细信息
- android - Android Studio,Volley 我没有收到 JSON 响应