您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python – 如何计算熊猫中一行中所有元素的加权和?

5b51 2022/1/14 8:23:30 python 字数 3240 阅读 593 来源 www.jb51.cc/python

我有一个有多列的熊猫数据框.我想从行中的值和另一个列向量数据框的权重创建一个新的columns weighted_sum应具有以下值: 行[weighted_sum] =行[col0] *权重[0]行[col1] *权重[1]行[col2] *权重[2] … 我发现函数sum(axis = 1),但它不让我乘以重量. 编辑: 我改变了一些事情. 体重看起来像这样: 0 col1 0.5 col2

概述

weighted_sum应具有以下值:

行[weighted_sum] =行[col0] *权重[0]行[col1] *权重[1]行[col2] *权重[2] …

我发现函数sum(axis = 1),但它不让我乘以重量.

编辑:
我改变了一些事情.

体重看起来像这样:

0
col1 0.5
col2 0.3
col3 0.2

df看起来像这样:

col1 col2 col3
1.0  2.2  3.5
6.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]: df
Out[123]:
           a          b          c
0       1.00       2.20       3.50
1       6.10       0.40       1.20

In [124]: weight
Out[124]:
           0
a       0.50
b       0.30
c       0.20

In [125]: df * weight
Out[125]:
           0          a          b          c
0        nan        nan        nan        nan
1        nan        nan        nan        nan
a        nan        nan        nan        nan
b        nan        nan        nan        nan
c        nan        nan        nan        nan

您可以访问列:

In [126]: df * weight[0]
Out[126]:
           a          b          c
0       0.50       0.66       0.70
1       3.05       0.12       0.24

In [128]: (df * weight[0]).sum(1)
Out[128]:
0         1.86
1         3.41
dtype: float64

或者使用点来获取一个DataFrame

In [127]: df.dot(weight)
Out[127]:
           0
0       1.86
1       3.41

把它们整合在一起:

In [130]: df['weighted_sum'] = df.dot(weight)

In [131]: df
Out[131]:
           a          b          c  weighted_sum
0       1.00       2.20       3.50          1.86
1       6.10       0.40       1.20          3.41

以下是每个方法的时间,使用较大的DataFrame.

In [145]: df = DataFrame(randn(10000000,3),columns=list('abc'))
weight
In [146]: weight = DataFrame(Series([0.5,name=0))

In [147]: timeit df.dot(weight)
10 loops,best of 3: 57.5 ms per loop

In [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 loop

In [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 – 如何计算熊猫中一行中所有元素的加权和?所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶