Restar columnas pandas de una columna especificada

¿Cómo puedo restar dinámicamente valores de varias columnas de marcos de datos de pandas de una columna específica? En este caso, ¿cómo puedo restar las columnas A, B y C del depósito y colocar el valor en las columnas A, B y C correspondientes?

date deposit ABC 0 2017-01-15 12 5 10 12 1 2017-01-16 20 10 4 32 2 2017-01-17 5 50 10 18 3 2017-01-18 22 15 20 12 

debe producir:

  date deposit ABC 0 2017-01-15 12 7 2 0 1 2017-01-16 20 10 16 -12 2 2017-01-17 5 -45 -5 -13 3 2017-01-18 22 7 2 10 

 In [226]: df[['A','B','C']] = df.deposit.values[:, None] - df[['A','B','C']] In [227]: df Out[227]: date deposit ABC 0 2017-01-15 12 7 2 0 1 2017-01-16 20 10 16 -12 2 2017-01-17 5 -45 -5 -13 3 2017-01-18 22 7 2 10 

loc + rsub

 cols = ['A', 'B', 'C'] df.loc[:, cols] = df[cols].rsub(df.deposit, 0) df date deposit ABC 0 2017-01-15 12 7 2 0 1 2017-01-16 20 10 16 -12 2 2017-01-17 5 -45 -5 -13 3 2017-01-18 22 7 2 10 

inplace
Mi preferencia por hacerlo en el inplace

 df.update(df[['A', 'B', 'C']].rsub(df.deposit, 0)) df date deposit ABC 0 2017-01-15 12 7 2 0 1 2017-01-16 20 10 16 -12 2 2017-01-17 5 -45 -5 -13 3 2017-01-18 22 7 2 10 

copy
Mi preferencia en general

 df.assign(**df[['A', 'B', 'C']].rsub(df.deposit, 0).to_dict('list')) date deposit ABC 0 2017-01-15 12 7 2 0 1 2017-01-16 20 10 16 -12 2 2017-01-17 5 -45 -5 -13 3 2017-01-18 22 7 2 10 
 for c in ['A','B','C']: df[c]=df['deposit']-df[c]