Si tengo un marco de datos similar a este
Apples Bananas Grapes Kiwis 2 3 nan 1 1 3 7 nan nan nan 2 3Me gustaría agregar una columna como esta
Apples Bananas Grapes Kiwis Fruit Total 2 3 nan 1 6 1 3 7 nan 11 nan nan 2 3 5 Supongo que podría usar df['Apples'] + df['Bananas'] y así sucesivamente, pero mi marco de datos real es mucho más grande que esto. Esperaba que una fórmula como df['Fruit Total']=df[-4:-1].sum pudiera hacer el truco en una línea de código. Sin embargo, eso no funcionó. ¿Hay alguna forma de hacerlo sin resumir explícitamente todas las columnas?
Primero puede seleccionar por iloc y luego sum :
df['Fruit Total']= df.iloc[:, -4:-1].sum(axis=1) print (df) Apples Bananas Grapes Kiwis Fruit Total 0 2.0 3.0 NaN 1.0 5.0 1 1.0 3.0 7.0 NaN 11.0 2 NaN NaN 2.0 3.0 2.0Para sumar todas las columnas usan:
df['Fruit Total']= df.sum(axis=1)Esto puede ser útil para los principiantes, por lo que, en aras de la exhaustividad, si conoce los nombres de las columnas (por ejemplo, están en una lista), puede usar:
column_names = ['Apples', 'Bananas', 'Grapes', 'Kiwis'] df['Fruit Total']= df[column_names].sum(axis=1) Esto le brinda flexibilidad sobre qué columnas usar, ya que simplemente tiene que manipular la lista column_names y puede hacer cosas como seleccionar solo columnas con la letra 'a' en su nombre. Otro beneficio de esto es que es más fácil para los humanos entender lo que están haciendo a través de los nombres de las columnas. Combine esto con list(df.columns) para obtener los nombres de las columnas en formato de lista. Por lo tanto, si desea eliminar la última columna, todo lo que tiene que hacer es:
column_names = list(df.columns) df['Fruit Total']= df[column_names[:-1]].sum(axis=1)Es posible hacerlo sin saber el número de columnas e incluso sin iloc:
print(df) Apples Bananas Grapes Kiwis 0 2.0 3.0 NaN 1.0 1 1.0 3.0 7.0 NaN 2 NaN NaN 2.0 3.0 cols_to_sum = df.columns[ : df.shape[1]-1] df['Fruit Total'] = df[cols_to_sum].sum(axis=1) print(df) Apples Bananas Grapes Kiwis Fruit Total 0 2.0 3.0 NaN 1.0 5.0 1 1.0 3.0 7.0 NaN 11.0 2 NaN NaN 2.0 3.0 5.0