pythonpandasdatetimetimedelta

How to substract amount of minutes in Pandas DataFrame datetime with condition?


I have a DataFrame like this (date: datetime64[ns], v: float64)

date                   v
2024-09-01 22:09:55    1.2
2024-09-01 22:12:08    1.11
2024-09-01 22:59:59    1.7
2024-09-01 23:00:02    1.1
2024-09-01 23:04:00    2.2

what I want to have is if the minutes in datetime are <= 10 then substract 11 minutes (something like df['date']-timedelta(minutes=11)). Otherwise keep the original datetime.

The expected output should be

date                   v
2024-09-01 21:58:55    1.2
2024-09-01 22:12:08    1.11
2024-09-01 22:59:59    1.7
2024-09-01 22:49:02    1.1
2024-09-01 22:53:00    2.2

Solution

  • Use DataFrame.loc with test minutes by Series.dt.minute and subtract Timedelta:

    df = pd.DataFrame({'date':pd.to_datetime(['2024-09-01 22:09:55',
                                              '2024-09-01 22:12:08',
                                              '2024-09-01 22:59:59',
                                              '2024-09-01 23:00:02',
                                              '2024-09-01 23:04:00']),
                       'v':[1.2,1.11,1.7,1.7,2.2]})
    
    df.loc[df['date'].dt.minute <= 11, 'date'] -= pd.Timedelta('11 Min')
    print (df)
                     date     v
    0 2024-09-01 21:58:55  1.20
    1 2024-09-01 22:12:08  1.11
    2 2024-09-01 22:59:59  1.70
    3 2024-09-01 22:49:02  1.70
    4 2024-09-01 22:53:00  2.20