我正在尝试计算20个对象的质心,其中每个对象都有自己不同的质量。
这些对象在数据框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 ...
有帮助吗?
如果我理解正确,您可以像这样计算所需的列:
>>> df.mul(m).sum(axis=1)/sum(m)
0 -214.921628
1 -214.951023
2 -214.968638
3 -215.201292
4 -215.214800
使用DataFrame.dot
并除以列表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