2017-09-26 36 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

相關問題