如何在Python中的数据框中将日期时间舍入到十分钟的日期时间

时间:2015-12-02 22:21:36

标签: python datetime rounding

我有一列数据时间格式:2015-06-25 03:29:58我相信是在datetime64。 我想将它们四舍五入到最近的十分钟。

aList = ['1', '2', '3']
print [element + n for element, n in zip(aList, myList)]
['1hello', '2good', '3what']

我已经全神贯注地找到了这个问题的答案,有一些线程和解决方案可以用于舍入时间,例如: How do I round datetime column to nearest quarter hour

然而,这种方法只能向下舍入,而不是向上舍入。

我也看过其他解决方案,但无法解决如何将它们应用到数据帧中的日期时间。

我尝试了很多不同的版本:

2015-06-25 03:29:58  =   2015-06-25 03:30:00
2015-06-25 03:24:58  =   2015-06-25 03:20:00
2015-06-25 03:59:58  =   2015-06-25 04:00:00

然而这不起作用,因为当你向上翻55时,它给出了60的答案。在这种格式中这是不可接受的。 我想应用一些if语句,但是我无法理解如何将它们应用于这种格式。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

试试这个:

rounded_ten = lambda t:t.replace(minute = t.minute / 10 * 10).replace(second = 0)+ pd.Timedelta(' 10分钟')

我想我最初误解了这个问题。这应该有效:

import pandas as pd

def rounded_ten(t):
    ''' add 5 minutes to the date first and then apply mathematical floor to the minute part.
    It's easier to apply mathematical floor operation on date parts instead of rounding because for example you cannot round up 58 seconds to 60 seconds but you can always apply floor and stay within the range.
    '''
    t=t+pd.Timedelta('5 minutes') 
    return t.replace(minute=t.minute//10*10).replace(second=0)

或者如果你想使用一个班轮:

rounded_ten = lambda t: (t+pd.Timedelta('5 minutes')).replace(minute=(t+pd.Timedelta('5 minutes')).minute//10*10).replace(second=0)

答案 1 :(得分:1)

  

How do I round datetime column to nearest quarter hour
  但是这种方法只能向下舍入,而不是向上舍入。

您可以将其与Rounding up to nearest 30 minutes in python中的公式结合使用:

from datetime import timedelta

delta = timedelta(minutes=10)
df['<column>'] = df['<column>'].apply(lambda dt: ceil_dt(dt, delta))