¿Cómo sumar valores negativos y positivos usando GroupBy en Pandas?

En este artículo, discutiremos cómo calcular la suma de todos los números negativos y números positivos en DataFrame usando el método GroupBy en Pandas.

Para utilizar el método groupby() utilice la siguiente sintaxis.

Sintaxis: df.groupby(nombre_columna)

Implementación paso a paso

Paso 1: creación de funciones lambda para calcular valores de suma positiva y suma negativa.

pos = lambda col : col[col > 0].sum()
neg = lambda col : col[col < 0].sum()

Paso 2: Usaremos el método groupby() y aplicaremos la función lambda para calcular la suma.

d = df.groupby(df['Alphabet'])
print(d['Frequency'].agg([('negative_values', neg),
                         ('positive_values', pos)
                         ]))
print(d['Bandwidth'].agg([('negative_values', neg),
                         ('positive_values', pos)
                         ]))

Ejemplos

Ejemplo 1: 

Calcule la suma de todos los valores positivos y negativos de a, b, c para ambas columnas, es decir, frecuencia y ancho de banda

Python3

# Import Necessary Libraries
import pandas as pd
import numpy as np
  
# Creating a DataFrame with 
# random values
df = pd.DataFrame({'Alphabet': ['a', 'b', 'c', 'c',
                                'a', 'a', 'c', 'b'],
                     
                   'Frequency': [-10, 29, -12, -190,
                                 72, -98, -12, 0],
                     
                   'BandWidth': [10, 34, 23, -10, -87,
                                 -76, 365, 10]})
  
print(df)
  
# Group By dataframe on categorical
# values
d = df.groupby(df['Alphabet'])
  
# creating lambda function to calculate
# positive as well as negative values
def pos(col): 
  return col[col > 0].sum()
  
def neg(col): 
  return col[col < 0].sum()
  
  
# Apply lambda function to particular 
# column
print(d['Frequency'].agg([('negative_values', neg),
                          ('positive_values', pos)
                          ]))
  
print(d['Bandwidth'].agg([('negative_values', neg),
                          ('positive_values', pos)
                          ]))

Producción:

Ejemplo 2:

Calcule la suma de todos los valores positivos y negativos de a, b para ambas columnas, es decir, X e Y

Python3

# Import Necessary Libraries
import pandas as pd
import numpy as np
  
# Creating a DataFrame with random values
df = pd.DataFrame({'Function': ['F(x)', 'F(x)', 'F(y)',
                                'F(x)', 'F(y)', 'F(x)',
                                'F(x)', 'F(y)'],
                     
                   'X': [-10, 29, -12, -190, 72, -98,
                         -12, 0],
                     
                   'Y': [10, 34, 23, -10, -87, -76, 
                         365, 10]})
  
print(df)
  
# Group By dataframe on categorical values
d = df.groupby(df['Function'])
  
# creating lambda function to calculate
# positive as well as negative values
def pos(col): 
  return col[col > 0].sum()
  
def neg(col): 
  return col[col < 0].sum()
  
# Apply lambda function to particular 
# column
print(d['X'].agg([('negative_values', neg),
                  ('positive_values', pos)
                  ]))
  
print(d['Y'].agg([('negative_values', neg),
                  ('positive_values', pos)
                  ]))

Producción:

Marco de datos

Salida X

Salida Y

Ejemplo 3:

Calcule la suma de todos los valores positivos y negativos de cada nombre, es decir, Marcas. El siguiente paso es hacer la función lambda para calcular la suma. En el último paso, agruparemos los datos según los nombres y llamaremos a las funciones lambda para calcular la suma de los valores.

Python3

# Import Necessary Libraries
import pandas as pd
import numpy as np
  
# Creating a DataFrame with random values
df = pd.DataFrame({'Name': ['Aryan', 'Nityaa', 'Dhruv',
                            'Dhruv', 'Nityaa', 'Aryan',
                            'Nityaa', 'Aryan', 'Aryan', 
                            'Dhruv', 'Nityaa', 'Dhruv', 
                            'Dhruv'],
                   'Marks': [90, 93, 78, 56, 34, 12, 67, 
                             45, 78, 92, 29, 88, 81]})
print(df)
  
# Group By dataframe on categorical values
d = df.groupby(df['Name'])
  
# creating lambda function to calculate
# positive as well as negative values
def pos(col): 
  return col[col > 0].sum()
  
def neg(col): 
  return col[col < 0].sum()
  
  
# Apply lambda function to particular
# column
print(d['Marks'].agg([('negative_values', neg),
                      ('positive_values', pos)
                      ]))

Producción:

nombres

Marcas

Publicación traducida automáticamente

Artículo escrito por dev247kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *