python - 数据框中的质量中心按行排列,并将每列乘以不同的质量
问题描述
我正在尝试计算 20 个物体的质心,其中每个物体都有自己不同的质量。
这些对象在 dataframe 中表示cm_x
,它们的关联质量在列表中。为了节省空间,下面我只展示了这 20 个对象中的 3 个。每个对象都有一个x, y, z
坐标,但我只显示坐标,x
然后我可以将相同的技术应用于其余对象。下面是数据框的头部。
bar_head_x bar_hip_centre_x bar_left_ankle_x
0 -203.3502 -195.4573 -293.262
1 -203.4280 -195.4720 -293.251
2 -203.4954 -195.4675 -293.248
3 -203.5022 -195.9193 -293.219
4 -203.5014 -195.9092 -293.328
m_head = 0.081
m_hipc = 0.139
m_lank = 0.0465
m = [m_head,m_hipc,m_lank]
我在另一个类似的问题中看到,有人提出了这种方法,但是这并没有包含大众,这就是我遇到问题的地方:
def series_sum(pd_series):
return np.sum(np.dot(pd_series.values, np.asarray(range(1, len(pd_series)+1)))/np.sum(pd_series))
cm_x.apply(series_sum, axis=1)
基本上我希望每一行都有一个相关的质心,使用的质心公式是sum(x_i * m_i) / sum(m_i)
.
所需的结果将是数据框中的新列,如下所示:
cm_x
0 -214.92
1 ...
2 ...
3 ...
4 ...
有什么帮助吗?
解决方案
使用DataFrame.dot
并除以sum
列表m
:
s = df.dot(m).div(sum(m))
print (s)
0 -214.921628
1 -214.951023
2 -214.968638
3 -215.201292
4 -215.214800
7441 -245.078910
7442 -244.943961
7443 -244.806606
7444 -244.665285
7445 -244.533503
dtype: float64
如果需要DataFrame
添加Series.to_frame
:
df1 = df.dot(m).div(sum(m)).to_frame('cm_x')
print (df1)
cm_x
0 -214.921628
1 -214.951023
2 -214.968638
3 -215.201292
4 -215.214800
7441 -245.078910
7442 -244.943961
7443 -244.806606
7444 -244.665285
7445 -244.533503
推荐阅读
- ios - Braintree 的 PayPal 集成所需的 Firebase 客户端 ID
- ruby-on-rails - 在 gems 中使用 require false 后,我是否必须在需要的地方一次又一次地加载 gem,否则它会被缓存?
- c# - Unity Facebook 插件 FacebookContentProvider 未找到运行时异常
- groovy - 如何将类似行的参数结构传递给方法?
- java - 使用 SpringBoot 处理 REST 中的自定义验证和异常
- google-cloud-dataproc - 从 Yarn UI 终止 Dataproc 作业不再有效 - 仅从 Dataproc UI
- arrays - 如何嵌套多个查询并为所有查询提供一个条件
- reactjs - 导出时用“withRouter”包装的测试组件
- image - 如何在带有 Jekyll-seo-tag 的帖子上为 Twitter 卡片添加图像?
- apache - 如何删除 php 扩展表单 URL .htaccess