Pandas: sum las filas de DataFrame para columnas dadas

Tengo el siguiente DataFrame:

In [1]: import pandas as pd df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]}) df Out [1]: abcd 0 1 2 dd 5 1 2 3 ee 9 2 3 4 ff 1 

Me gustaría agregar una columna 'e' que es la sum de las columnas 'a' , 'b' y 'd' .

Al pasar por los foros, pensé que algo como esto funcionaría:

 df['e'] = df[['a','b','d']].map(sum) 

¡Pero no!

Me gustaría realizar la operación que tiene la lista de columnas ['a','b','d'] y df como entradas.

    Related of "Pandas: sum las filas de DataFrame para columnas dadas"

    Puede simplemente sum y establecer param axis=1 para sumr las filas, esto ignorará ninguna columna numérica:

     In [91]: df = pd.DataFrame({'a': [1,2,3], 'b': [2,3,4], 'c':['dd','ee','ff'], 'd':[5,9,1]}) df['e'] = df.sum(axis=1) df Out[91]: abcde 0 1 2 dd 5 8 1 2 3 ee 9 14 2 3 4 ff 1 8 

    Si solo desea sumr columnas específicas, puede crear una lista de las columnas y eliminar las que no le interesan:

     In [98]: col_list= list(df) col_list.remove('d') col_list Out[98]: ['a', 'b', 'c'] In [99]: df['e'] = df[col_list].sum(axis=1) df Out[99]: abcde 0 1 2 dd 5 3 1 2 3 ee 9 5 2 3 4 ff 1 7 

    Si solo tiene unas pocas columnas para sumr, puede escribir:

     df['e'] = df['a'] + df['b'] + df['d'] 

    Esto crea una nueva columna e con los valores:

      abcde 0 1 2 dd 5 8 1 2 3 ee 9 14 2 3 4 ff 1 8 

    Para listas más largas de columnas, se prefiere la respuesta de EdChum.

    Esta es una forma más sencilla de usar iloc para seleccionar qué columnas sumr:

     df['f']=df.iloc[:,0:2].sum(axis=1) df['g']=df.iloc[:,[0,1]].sum(axis=1) df['h']=df.iloc[:,[0,3]].sum(axis=1) 

    Produce:

      abcdefgh 0 1 2 dd 5 8 3 3 6 1 2 3 ee 9 14 5 5 11 2 3 4 ff 1 8 7 7 4 

    No puedo encontrar una manera de combinar un rango y columnas específicas que funcionen, por ejemplo, algo como:

     df['i']=df.iloc[:,[[0:2],3]].sum(axis=1) df['i']=df.iloc[:,[0:2,3]].sum(axis=1) 

    Cree una lista de nombres de columnas que desee agregar.

     df['total']=df.loc[:,list_name].sum(axis=1) 

    Si desea la sum para ciertas filas, especifique las filas usando ‘:’

    La siguiente syntax me ayudó cuando tengo columnas en secuencia

     awards_frame.values[:,1:4].sum(axis =1) 

    Simplemente puede pasar su dataframe a la siguiente función :

     def sum_frame_by_column(frame, new_col_name, list_of_cols_to_sum): frame[new_col_name] = frame[list_of_cols_to_sum].astype(float).sum(axis=1) return(frame) 

    Ejemplo :

    Tengo un dataframe (awards_frame) de la siguiente manera:

    introduzca la descripción de la imagen aquí

    … y quiero crear una nueva columna que muestre la sum de premios para cada fila :

    Uso

    Simplemente paso mi awards_frame a la función, especificando también el nombre de la nueva columna y una lista de los nombres de las columnas que se van a sumr:

     sum_frame_by_column(awards_frame, 'award_sum', ['award_1','award_2','award_3']) 

    Resultado :

    introduzca la descripción de la imagen aquí