¿Cómo agrupar Pandas DataFrame por fecha y hora?

En este artículo, discutiremos cómo agrupar por un marco de datos en función de la fecha y la hora en Pandas. Veremos la forma de agrupar un marco de datos de series temporales por Año, Mes, días, etc. Además, también veremos la forma de agrupar por objetos de tiempo como minutos.

Pandas GroupBy nos permite especificar una instrucción groupby para un objeto. Esta instrucción específica seleccionará una columna a través del parámetro clave de la función de agrupador junto con los parámetros de nivel y/o eje, si se proporcionan, un nivel del índice del objeto/columna de destino.

Sintaxis: pandas.Grouper(key=Ninguno, level=Ninguno, freq=Ninguno, axis=0, sort=False)

A continuación se muestran algunos ejemplos que muestran cómo agrupar por un marco de datos en función de la fecha y la hora utilizando la clase Pandas Grouper.

Ejemplo 1: Agrupar por mes

Python3

# importing modules
import pandas as pd
  
# creating a dataframe df
df = pd.DataFrame(
    {
        "Date": [
            pd.Timestamp("2000-11-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-03-11"),
            pd.Timestamp("2000-01-26"),
            pd.Timestamp("2000-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
  
# show df
display(df)
  
# applying the groupby function on df
df.groupby(pd.Grouper(key='Date', axis=0, 
                      freq='M')).sum()

Producción:

En el ejemplo anterior, el marco de datos está agrupado por la columna Fecha. Como proporcionamos freq = ‘M’, que significa mes, los datos se agrupan por meses hasta la última fecha de cada mes y se proporciona la columna de suma de precios. No hemos proporcionado valores para todos los meses, luego también la función groupby mostró datos para todos los meses y asignó el valor 0 para otros meses.

Ejemplo 2: Agrupar por días

Python3

# importing modules
import pandas as pd
  
# creating a dataframe df
df = pd.DataFrame(
    {
        "Date": [
            pd.Timestamp("2000-11-02"),
            pd.Timestamp("2000-01-02"),
            pd.Timestamp("2000-01-09"),
            pd.Timestamp("2000-03-11"),
            pd.Timestamp("2000-01-26"),
            pd.Timestamp("2000-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
  
# display dataframe
display(df)
  
# applying groupby
df.groupby(pd.Grouper(key='Date', axis=0, 
                      freq='2D', sort=True)).sum()

Producción:

En el ejemplo anterior, el marco de datos está agrupado por la columna Fecha. Como proporcionamos freq = ‘5D’, que significa cinco días, los datos se agrupan por intervalo de 5 días de cada mes hasta la última fecha indicada en la columna de fecha.

Ejemplo 3: Agrupar por año

Python3

# importing module
import pandas as pd
  
# creating dataframe with datetime
df = pd.DataFrame(
    {
        "Date": [
  
            # here the date contains
            # different years
            pd.Timestamp("2010-11-02"),
            pd.Timestamp("2011-01-02"),
            pd.Timestamp("2013-01-09"),
            pd.Timestamp("2014-03-11"),
            pd.Timestamp("2015-01-26"),
            pd.Timestamp("2012-02-16")
        ],
        "ID": [1, 2, 3, 4, 5, 6],
        "Price": [140, 120, 230, 40, 100, 450]
    }
)
# show df
display(df)
  
# applying groupby function
df.groupby(pd.Grouper(key='Date', freq='2Y')).sum()

Producción:

En el ejemplo anterior, el marco de datos está agrupado por la columna Fecha. Como proporcionamos freq = ‘2Y’, que significa 2 años, los datos se agrupan en el intervalo de 2 años.

Ejemplo 4: Agrupar por minutos

Python3

# importing module
import pandas as pd
  
# create an array of 5 dates starting 
# at '2015-02-24', one per minute
dates = pd.date_range('2015-02-24', periods=10, freq='T')
  
# creating dataframe with above array 
# of dates
df = pd.DataFrame({"Date": dates, "ID": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
                   "Price": [140, 120, 230, 40, 100, 450, 234, 785, 12, 42]})
  
# display dataframe
display(df)
  
# applied groupby function
df.groupby(pd.Grouper(key='Date', freq='2min')).sum()

Producción:

En el ejemplo anterior, los datos se agrupan en intervalos de cada 2 minutos.

Publicación traducida automáticamente

Artículo escrito por neelutiwari 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 *