Округление значений даты и времени до предыдущих 30 секунд с использованием панд - PullRequest
1 голос
/ 23 июня 2019

Метка времени указана с точностью до секунд.Например:

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

Give myTime is DateTime объект Хотелось бы отрегулировать время как 2019-06-03 11:47:30, 2019-06-03 11:47:00, то есть до предыдущей 30-секундной точности.

Одна функция можетприменяется

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

Задача заключается в вызове функции, например

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

1 Ответ

2 голосов
/ 23 июня 2019

Используйте dt.floor с "30 с":

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]

Для получения дополнительной информации о частотах даты / времени, которые вы можете использовать здесь, проверьте Смещение псевдонимов .


Если вы хотите записать это как многократно используемую функцию, измените код так, чтобы он принимал два аргумента: qualifier и freq, обозначающие масштаб и частоту соответственно.

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

Пробный прогон,

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]

Хорошо работает и для других частот,

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

0   2019-06-03
1   2019-06-03
Name: myTime, dtype: datetime64[ns]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...