¿Fusionar y restar columnas de DataFrame en pandas?

Tengo un dataframe de pandas, algo así como:

col1 col2 col3 col5 NaN 1 2 8 2 NaN 4 8 4 NaN 4 8 

Quiero hacer dos cosas:

1) Fusionar las columnas 1 y 2:

 newcol1 col3 col5 1 2 8 2 4 8 4 4 8 

He intentado usar .concat, pero eso solo concatena las filas. No parece que pueda usar operadores estándar + con valores de NaN.

2) Reste la columna 5 de la nueva columna 1 y la columna 3, así que termino con:

 newcol1 col3 -7 -6 -6 -4 -4 -4 

Intenté hacerlo de esta manera:

 dataframe[['newcol1', 'col2']] - dataframe['col5'] 

y

 dataframe[['newcol1', 'col2']].subtract(dataframe['col5']) 

pero tampoco funciona.

Para obtener la nueva columna, puede usar fillna (o combine_first ):

 df['newcol1'] = df.col1.fillna(df.col2) 

Luego, para la resta, use sub y especifique axis=0 ya que queremos considerar los índices de fila al hacer coincidir las tags (no los índices de columna como es el predeterminado):

 >>> df[['newcol1', 'col3']].sub(df['col5'], axis=0) newcol1 col3 0 -7 -6 1 -6 -4 2 -4 -4 

Aquí hay un enfoque.

Podrías crear newcol1 por sum(axis=1)

 In [256]: df['newcol1'] = df[['col1', 'col2']].sum(axis=1) In [257]: df Out[257]: col1 col2 col3 col5 newcol1 0 NaN 1 2 8 1 1 2 NaN 4 8 2 2 4 NaN 4 8 4 

Luego usa df.sub() en axis=0

 In [258]: df[['newcol1', 'col3']].sub(df['col5'], axis=0) Out[258]: newcol1 col3 0 -7 -6 1 -6 -4 2 -4 -4 
 In [58]: df['newcol'] = df[['col1','col2']].sum(axis=1) - df['col5'] df['col3'] = df['col3'] - df['col5'] df Out[58]: col1 col2 col3 col5 newcol 0 NaN 1 -6 8 -7 1 2 NaN -4 8 -6 2 4 NaN -4 8 -4 

Luego puedes soltar col1 y col2:

 In [59]: df = df.drop(['col1','col2'],axis=1) df Out[59]: col3 col5 newcol 0 -6 8 -7 1 -4 8 -6 2 -4 8 -4