I have a method called counting that takes 2 arguments. I need to call this method using the apply() method. However when I am passing the two parameters to the apply method it
You could just use a lambda
:
DF['new_column'] = DF['dic_column'].apply(lambda dic: counting(dic, 'word'))
On the other hand, there's absolutely nothing wrong with using partial
here:
from functools import partial
count_word = partial(counting, strWord='word')
DF['new_column'] = DF['dic_column'].apply(count_word)
As @EdChum mentions, if your counting
method is actually just looking up a word or defaulting it to zero, you can just use the handy dict.get
method instead of writing one yourself:
DF['new_column'] = DF['dic_column'].apply(lambda dic: dic.get('word', 0))
And a non-lambda
way to do the above, via the operator
module:
from operator import methodcaller
count_word = methodcaller(get, 'word', 0)
DF['new_column'] = DF['dic_column'].apply(count_word)
The accepted answer is totally perfect. Taught me some interesting things about Python. But just for fun, here's more precisely what we're looking for:
selected_words = ['awesome', 'great', 'fantastic', 'amazing', 'love', 'horrible', 'bad', 'terrible', 'awful', 'wow', 'hate']
for this_word in selected_words:
products[this_word] = products['word_count'].apply(lambda dic: dic.get(this_word, 0))
Thanks for posting the question!