user2458922
user2458922

Reputation: 1721

Round down datetime values to previous 30 seconds using pandas

The Time Stamp give is in Seconds Precision. Eg:

myTime                 myVal
2019-06-03 11:47:37    0.34
2019-06-03 11:47:12    0.32

Give myTime is DateTime object Would like to adjust the time as 2019-06-03 11:47:30 , 2019-06-03 11:47:00 ie to previous 30 Second Precision.

One Function may be applied is

def timeAdjust(numSec):
    if numSec > 30:
        numSec = 30
    else:
        numSec = 0
    numSec

Challenge is to call the function, like

timeAdjust(df['myTime'].seconds) # Does not work ..

Upvotes: 1

Views: 465

Answers (1)

cs95
cs95

Reputation: 402493

Use dt.floor with "30s":

pd.to_datetime(df['myTime']).dt.floor('30s')

0   2019-06-03 11:47:30
1   2019-06-03 11:47:00
Name: myTime, dtype: datetime64[ns]

For more information regarding date/time frequencies you can use here, check out Offset Aliases.


If you want to write this as a reusable function, modify your code to accept two arguments: qualifier, and freq denoting the scale and frequency respectively.

def adjust_time(ser, qualifier, freq=1):
    return ser.dt.floor(f'{freq}{qualifier}')

Sample run,

adjust_time(pd.to_datetime(df['myTime']), qualifier='s', freq=30)

0   2019-06-03 11:47:30
1   2019-06-03 11:47:00
Name: myTime, dtype: datetime64[ns]

It works nicely for other frequencies as well,

adjust_time(pd.to_datetime(df['myTime']), qualifier='D')

0   2019-06-03
1   2019-06-03
Name: myTime, dtype: datetime64[ns]

Upvotes: 2

Related Questions