2017-09-26 74 views
0

我有一个数据帧有两列AB和一个用户定义的函数,根据A中的值执行两个计算并返回一个元组,其中包含两个项目output1output2使用df.apply()方法将单个元组项分配给多个数据框列?

df = pd.DataFrame({'A':[1,2,3,4,5],'B':[5,4,3,2,1]}) 

def myfunc(row): 

    selected_row = row['A'] 

    output1 = selected_row + 10 
    output2 = selected_row + 20 

    return (output1, output2) 

我希望做的是分配的output1output2值以两个独立的数据框列,CD。我至今能够分配整个返回的元组(有两个项目),以一个劲儿地列如:

df['C'] = df.apply(myfunc,axis=1) 

我希望能够为两个不同的列做到这一点,与output1去列Coutput2前往列D;我在可视化是这样的:

df['C'], df['D'] = df.apply(myfunc,axis=1) 

任何帮助或建议,我们非常感激。

+0

你可能会超过用'也只是循环iterrows' ... –

回答

0

myfunc做什么事实上需要两列吗?在你的例子中没有,所以你实际上不需要使用apply(可能不想,因为它很慢)。

你可以使用df.assign代替:

df.assign(C=lambda x: x.A + 10, D=lambda x: x.B + 20)

+0

它不需要两列 - 从数据帧只是一个特定的列 - - 但它确实包含多个步骤(为简洁起见,此处的计算被用作更简单的示例)。 – dmitriys

+0

太好了。每个关键字arg的值只需要是一个可调用的,所以你可以定义一个func来获取一个数据帧,然后调用它:'df.assign(C = my_func)'。只要记住以列方式工作而不是按行方式工作,因为这样会更有效率。 – thaavik

+0

谢谢。我添加了一个参数来选择要返回的输出'output1'或'output2',而不是返回一个元组。我现在使用'df.apply'的两行代码来获得所需的结果,因为'df.appy'在应用函数时似乎带有关键字或位置参数。 'df.apply(MYFUNC,输出= 'OUTPUT1',轴线= 1)'。有没有一种方法可以使用'df.apply'为类似的函数赋值? – dmitriys

相关问题