Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

112
Vistas
Fecha de redondeo en el marco de datos en Python

Este es mi marco de datos

 ID Date Value Final Value 0 9560 12/15/2021 30 5.0 1 9560 07/3/2021 25 5.0 2 9560 03/03/2021 20 20.0 3 9712 08/20/2021 15 5.0 4 9712 12/31/2021 10 10.0 5 9920 04/11/2021 5 5.0

Aquí necesito crear otra columna 'Fecha redonda'. Obtenga la fecha de la columna 'Fecha' si la fecha es mayor que 15. La fecha debe redondearse a la fecha de inicio de ese mes o, de lo contrario, a la fecha de inicio del próximo mes. La salida esperada se da a continuación.

 ID Date Value Final Value Round Date 0 9560 12/15/2021 30 5.0 12/01/2021 1 9560 07/3/2021 25 5.0 07/01/2021 2 9560 03/03/2021 20 20.0 03/01/2021 3 9712 08/20/2021 15 5.0 09/01/2021 4 9712 12/31/2021 10 10.0 01/01/2022 5 9920 04/11/2021 5 5.0 04/01/2021
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La solución se compone de algunos elementos:

  1. crear una función para redondear una sola fecha. Aunque se puede usar una función lambda anónima, es mejor crear una función porque podemos probar la función (prueba unitaria) para ver si funciona de la manera que esperamos.

  2. Primero necesitamos convertir la columna 'Fecha' en un tipo de fecha y hora. Para esto, podemos usar la función integrada de pandas pd.to_datetime().

  3. Por último, para crear la columna 'Fecha redonda', simplemente llamaremos a apply() en la columna 'Fecha' y le daremos nuestra función de fecha redonda.

Aquí está el código para redondear la columna Fecha en el marco de datos de pandas:

 from dateutil import relativedelta import pandas as pd # function to round date def round_date(date): # check if day is greater than 15 if date.day > 15: # change month to next month date += relativedelta.relativedelta(months=1) # change day to start of month date = date.replace(day=1) return date # read data df = pd.read_csv('your-path') # change date column to datetime df['Date'] = pd.to_datetime(df['Date'] ) # apply round date function to column df['Round Date'] = df['Date'].apply(round_date)

Aporte:

 ID Date Value Final Value 0 9560 12/15/2021 30 5.0 1 9560 07/03/2021 25 5.0 2 9560 03/03/2021 20 20.0 3 9712 08/20/2021 15 5.0 4 9712 12/31/2021 10 10.0 5 9920 04/11/2021 5 5.0

Producción:

 ID Date Value Final Value Round Date 0 9560 12/15/2021 30 5.0 12/01/2021 1 9560 07/03/2021 25 5.0 07/01/2021 2 9560 03/03/2021 20 20.0 03/01/2021 3 9712 08/20/2021 15 5.0 09/01/2021 4 9712 12/31/2021 10 10.0 01/01/2022 5 9920 04/11/2021 5 5.0 04/01/2021
over 4 years ago · Santiago Trujillo Denunciar

0

Usando numpy's where :

 import pandas as pd import numpy as np df["Date"] = pd.to_datetime(df.date) df["date.rounded"] = np.where( df.Date.dt.day > 15, df.Date + pd.offsets.MonthBegin(0), df.Date + pd.offsets.MonthEnd(0) - pd.offsets.MonthBegin(1) )

Esto produce:

 Date date.rounded 0 2021-12-15 2021-12-01 1 2021-07-03 2021-07-01 2 2021-03-03 2021-03-01 3 2021-08-20 2021-09-01 4 2021-12-31 2022-01-01 5 2021-04-11 2021-04-01
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una solución usando apply() y lambda

  1. Convierta valores en la columna Fecha a fecha y hora usando pd.to_datetime()
  2. use apply() y la función lambda para establecer el día en 1 y aumentar el valor del mes si el día de la condición es mayor que 15

Código:

 import pandas as pd from datetime import timedelta from dateutil.relativedelta import relativedelta df = pd.DataFrame({'Date': ['2/1/2021', '01/31/2021', '12/31/2021', '2021-12-01']}) df.Date = pd.to_datetime(df.Date) df['Round Date'] = df.Date.apply(lambda x: x.replace(day=1)+ relativedelta(months=1) if x.day > 15 else x.replace(day=1))

Aporte:

 Date 0 2/1/2021 1 01/31/2021 2 12/31/2021 3 2021-12-01

Producción:

 Date Round Date 0 2021-02-01 2021-02-01 1 2021-01-31 2021-02-01 2 2021-12-31 2022-01-01 3 2021-12-01 2021-12-01
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda