将函数应用于pandas dataframe并添加新列?

时间:2017-06-26 11:07:41

标签: python-3.x function pandas dataframe

我有一个简单的数据帧。它基本上看起来像这样 - 只是更大。

   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并将其打印出来。 我正在尝试创建一个新列url,其中包含get_url行的结果。

这是我做的:

for i in df.name:
    get_url(i) 

显然,这只会导致url逐个打印。但我试图扩充数据帧。我试过itterowsdf.loc,但到目前为止还没有成功。有任何想法吗?谢谢/ R

2 个答案:

答案 0 :(得分: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 :(得分:1)

apply方法正是您想要的。您需要做的就是为函数添加一个返回值:

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)

如果除了名称单元格之外还想传递其他参数,可以使用lambda:

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))