python – 如何计算熊猫中一行中所有元素的加权和?
发布时间:2020-09-16 07:14:48 所属栏目:Python 来源:互联网
导读:我有一个有多列的熊猫数据框.我想从行中的值和另一个列向量数据框的权重创建一个新的columns weighted_sum应具有以下值: 行[weighted_sum] =行[col0] *权重[0]行[col1] *权重[1]行[col2] *权重[2] … 我发现函数sum(axis = 1),但它不让我乘以重量. 编辑: 我
我有一个有多列的熊猫数据框.我想从行中的值和另一个列向量数据框的权重创建一个新的columns 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 – Django中的多态模型继承
- python – ImportError:Elastic Beanstalk中没有名为djang
- python – 单元测试(烧瓶 – 静止)GET API调用时获得500内部
- python – 试图写一个cPickle对象,但是得到一个’write’属
- 我如何确定python使用的类型的确切大小
- python – 使用dict参数的带有OR条件的Django过滤器
- 具有distinct()的Django order_by()过滤器
- python – 在大熊猫中合并多索引的单索引数据帧
- python – 分类:使用sklearn进行PCA和逻辑回归