Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

109
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!