python列表元素个数的加权和_python – 如何计算熊猫中一行中所有元素的加权和?...

问题是您将帧与不同大小的帧与不同的行索引相乘.这是解决方案:

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, 0.3, 0.2], index=list('abc'), 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).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值