Reputation: 1721
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
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