web-dev-qa-db-ja.com

適用を使用して既存のデータフレームに2つの新しい列を追加する

次のような適用関数を使用したいと思います。-2つの列を入力として受け取ります-関数に基づいて2つの新しい列を出力します。

例は、このadd_multiply関数です。

#function with 2 column inputs and 2 outputs
def add_multiply (a,b):
  return (a+b, a*b )

#example dataframe
df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

#this doesn't work
df[['add', 'multiply']] = df.apply(lambda x: add_multiply(x['col1'], x['col2']), axis=1)

理想的な結果:

col1  col2  add  multiply
1     3     4    3
2     4     6    8

14
David 8

あなたは付け加えられます result_type='expand' in apply

「展開」:リストのような結果が列に変換されます。

df[['add', 'multiply']]=df.apply(lambda x: add_multiply(x['col1'], x['col2']),axis=1,
                             result_type='expand')

または、データフレームコンストラクタを呼び出します。

df[['add', 'multiply']]=pd.DataFrame(df.apply(lambda x: add_multiply(x['col1'], 
                                    x['col2']), axis=1).tolist())

   col1  col2  add  multiply
0     1     3    4         3
1     2     4    6         8
13
anky_91

anky_91の回答は、applyの便利なオプションを強調しています。

ただし、この特定のケースでは、applyは必須ではありません。

df['add'], df['multiply'] = add_multiply(df['col1'],df['col2'])
7
Mark Wang