weighted_sum应具有以下值:
行[weighted_sum] =行[col0] *权重[0]行[col1] *权重[1]行[col2] *权重[2] …
我发现函数sum(axis = 1),但它不让我乘以重量.
编辑:
我改变了一些事情.
体重看起来像这样:
0col1 0.5col2 0.3col3 0.2
df看起来像这样:
col1 col2 col31.0 2.2 3.56.1 0.4 1.2
df * weight返回一个包含Nan值的数据帧.
解决方法 问题是您将帧与不同大小的帧与不同的行索引相乘.这是解决方案:In [121]: df = DataFrame([[1,2.2,3.5],[6.1,0.4,1.2]],columns=List('abc'))In [122]: weight = DataFrame(SerIEs([0.5,0.3,0.2],index=List('abc'),name=0))In [123]: dfOut[123]: a b c0 1.00 2.20 3.501 6.10 0.40 1.20In [124]: weightOut[124]: 0a 0.50b 0.30c 0.20In [125]: df * weightOut[125]: 0 a b c0 nan nan nan nan1 nan nan nan nana nan nan nan nanb nan nan nan nanc nan nan nan nan
您可以访问列:
In [126]: df * weight[0]Out[126]: a b c0 0.50 0.66 0.701 3.05 0.12 0.24In [128]: (df * weight[0]).sum(1)Out[128]:0 1.861 3.41dtype: float64
或者使用点来获取另一个DataFrame
In [127]: df.dot(weight)Out[127]: 00 1.861 3.41
把它们整合在一起:
In [130]: df['weighted_sum'] = df.dot(weight)In [131]: dfOut[131]: a b c weighted_sum0 1.00 2.20 3.50 1.861 6.10 0.40 1.20 3.41
以下是每个方法的时间,使用较大的DataFrame.
In [145]: df = DataFrame(randn(10000000,3),columns=List('abc'))weightIn [146]: weight = DataFrame(SerIEs([0.5,name=0))In [147]: timeit df.dot(weight)10 loops,best of 3: 57.5 ms per loopIn [148]: timeit (df * weight[0]).sum(1)10 loops,best of 3: 125 ms per loop
对于广泛的DataFrame:
In [162]: df = DataFrame(randn(10000,1000))In [163]: weight = DataFrame(randn(1000,1))In [164]: timeit df.dot(weight)100 loops,best of 3: 5.14 ms per loopIn [165]: timeit (df * weight[0]).sum(1)10 loops,best of 3: 41.8 ms per loop
所以,点更快,更可读.
注意:如果您的任何数据包含NaN,那么您不应该使用点,您应该使用乘法和sum方法.点不能处理NaN,因为它只是一个薄的包装器,在numpy.dot()(它不处理NaNs).
总结以上是内存溢出为你收集整理的python – 如何计算熊猫中一行中所有元素的加权和?全部内容,希望文章能够帮你解决python – 如何计算熊猫中一行中所有元素的加权和?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)