【问题标题】:Pandas: Rounding to nearest Hour熊猫:四舍五入到最近的小时
【发布时间】:2018-09-08 18:15:52
【问题描述】:

我有一个带有时间戳的列

 start_time: 
 0    2016-06-04 05:18:49
 1    2016-06-04 06:50:12
 2    2016-06-04 08:16:02
 3    2016-06-04 15:05:13
 4    2016-06-04 15:24:25

我想使用 start_time 列上的函数将分钟 >= 30 舍入到下一小时。

 def extract_time(col):
      time = col.strftime('%H:%M')
      min= int(time.strip(':')[1])
      hour= int(time.strip(':')[0])
      if min >= 30:
           return hour + 1
      return hour

然后我想用四舍五入的时间创建一个新列“小时”:

 df['hour'] = df['start_time'].apply(extract_time)

我没有得到一个四舍五入的“小时”列,而是得到以下内容:

 0    <function extract_hour at 0x128722b90>
 1    <function extract_hour at 0x128722b90>
 2    <function extract_hour at 0x128722b90>
 3    <function extract_hour at 0x128722b90>
 4    <function extract_hour at 0x128722b90>

【问题讨论】:

    标签: python pandas datetime-format python-datetime


    【解决方案1】:

    您可以使用以下矢量化解决方案:

    In [30]: df['hour'] = df['start_time'].dt.round('H').dt.hour
    
    In [31]: df
    Out[31]:
               start_time  hour
    0 2016-06-04 05:18:49     5
    1 2016-06-04 06:50:12     7
    2 2016-06-04 08:16:02     8
    3 2016-06-04 15:05:13    15
    4 2016-06-04 15:24:25    15
    

    【讨论】:

      【解决方案2】:

      试试这个:

      df['start_time2'] = df['start_time'].dt.floor('h')
      

      甚至这个:

      df['start_time2'] = df['start_time'].apply(lambda x: x.replace(minute=0, second=0))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多