使用apply()将值赋给新列

时间:2015-11-01 10:49:27

标签: python graphlab

我在名为sf的word_count中有一个名为SFrame的SArray。 word_count SArray中的每一行都包含一个字典。 我有一个名为selected_words的数组 我试图循环遍历每一列,以查看“selected_words”中的哪些单词出现在列中。如果它出现我取值并将其写入新列。 这是一个只有一个词('伟大')的例子:

selected_words = ['awesome ', 'great']
def word_count(row):
    if 'great' in row:
           sf['great']=row['great']
    else:
         abc="a" #nothing should happen
sf['word_count'].apply(word_count)

+-------------------------------+
|           word_count          |
+-------------------------------+
| {'and': 5, '6': 1, 'stink'... |
| {'and': 3, 'love': 1, 'it'... |
| {'and': 2, 'quilt': 1, 'it... |
| {'ingenious': 1, 'and': 3,... |
| {'and': 2, 'parents!!': 1,... |
| {'and': 2, 'this': 2, 'her... |
| {'shop': 1, 'noble': 1, 'i... |
| {'and': 2, 'all': 1, 'righ... |
| {'and': 1, 'help': 1, 'giv... |
| {'journal.': 1, 'nanny': 1... |
+-------------------------------+


print sf['great']
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ... ]

据我所知,相同的值(1)会应用于每一行,但我只需要在实际找到“great”一词的那一行。 我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

代码中的问题是,在每次调用函数word_count后,您正在更改完整列sf ['great']。这是另一种方法:

def word_count(d):
    return d['great'] if 'great' in d else 0

然后将此函数应用于sf ['word_count']列:

sf['great'] = sf['word_count'].apply(word_count)