2017-09-26 2 views
0

私はABという2つの列のデータフレームと、Aの値に基づいて2つの計算を実行し、output1output2の2つのタプルを返すユーザー定義関数を持っています。私がやりたいのは何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) 

は、2つの別々のデータフレームの列、CDoutput1output2の値を割り当てています。私はこれまでのようなACシングルカラム(両方のアイテムとの)全体返されたタプルを割り当てることができるよ:

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

私は2つの異なる列のためにこれを行うことができるようにしたいのですが、output1がに行くとカラムCおよびoutput2カラム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'の2つの行を使用して、新しい列ごとに1つの目的の結果を得るようになりました。' df.appy'は、関数を適用するときにキーワードまたは位置引数を取るように見えます。 'df.apply(myfunc、出力= '出力1'、軸= 1)'同様に 'df.apply'を使って関数に追加の引数を割り当てる方法はありますか? – dmitriys

関連する問題