我正在使用Graphlab,但我想这个问题可能适用于熊猫。

import graphlab
sf = graphlab.SFrame({'id': [1, 2, 3], 'user_score': [{"a":4, "b":3}, {"a":5, "b":7}, {"a":2, "b":3}], 'weight': [4, 5, 2]})


我想创建一个新列,其中“ user_score”中每个元素的值乘以“ weight”中的数字。那是,

sf = graphlab.SFrame({'id': [1, 2, 3], 'user_score': [{"a":4, "b":3}, {"a":5, "b":7}, {"a":2, "b":3}], 'weight': [4, 5, 2]}, 'new':[{"a":16, "b":12}, {"a":25, "b":35}, {"a":4, "b":6}])


我试图在下面编写一个简单的函数,但无济于事。有什么想法吗?

def trans(x, y):
    d = dict()
    for k, v in x.items():
        d[k] = v*y
    return d

sf.apply(trans(sf['user_score'], sf['weight']))


它收到以下错误消息:

AttributeError: 'SArray' object has no attribute 'items'

最佳答案

这很微妙,但是我想您想要的是:

sf.apply(lambda row: trans(row['user_score'], row['weight']))


apply函数将一个函数作为其参数,并将每一行作为参数传递给该函数。在您的版本中,您在调用apply之前评估了trans函数,这就是为什么错误消息抱怨在需要字典时将SArray传递给trans函数的原因。

关于python - 如何在Python中将每个元素乘以数组中每个元素的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37540864/

10-12 21:13