2017-06-26 6 views
2

私は単純なデータフレームを得ました。これは基本的にこのように見えます。pandasデータフレームに関数を適用し、新しい列を追加しますか?

import pandas as pd 
    csv = [{"name" : "Peters Company", "Apples" : 1}, {"name" : "Quagmires Company", "Apples" : 0}] 
    df = pd.DataFrame(csv) 

私は名前欄に書いた少しの機能を適用しようとしています。ここで私は何をすべきかです:

from google import search 
def get_url(query): 
    url = search(query, tld='com', num=1, stop=0, pause=10) 
    print(next(url)) 

私は特定のqueryを検索し、あとがき、それを印刷するためにGoogleを使用しています。 私は新しい列urlを作成しようとしていますが、行ごとにget_urlの結果が表示されます。ここで

は私がやったことです:明らか

for i in df.name: 
    get_url(i) 

urlでこれだけの結果が1つずつ印刷さばかり。しかし、私はデータフレームを撤廃しようとしています。私はitterowsdf.locで私の運を試しましたが、今のところうまくいきませんでした。何か案は?おかげで/ R

答えて

1

適用方法は、正確に何をしたいです。あなたがする必要があるすべてはあなたの関数に戻り値を追加することです:

def get_url(query): 
    url = search(query, tld='com', num=1, stop=0, pause=10) 
    return next(url) 

df['url'] = df['name'].apply(get_url) 

名前細胞に加えて、他のパラメータを渡したい場合は、ラムダを使用することができます。

def get_url(query, another_param): 
     url = search(query, tld='com', num=1, stop=0, pause=10) 
     return next(url) 

df['url'] = df['name'].apply(lambda column_name: get_url(column_name, another_value)) 
2

あなたはapplyを使用することができます。

df['url'] = df['name'].apply(get_url) 

またはassign

df = df.assign(url=df['name'].apply(get_url)) 

またはリスト内包表記:

df['url'] = [get_url(x) for x in df['name']] 
+1

うれしいことができます。あなたは別の答えから2番目のソリューションを使用していますか? – jezrael

+0

私が選んだ解決策は 'return()'関数を追加しました。それは私が逃したばかりの作品です... – Rachel

+1

私はそれも見逃しました;)素敵な一日! – jezrael

関連する問題