【问题标题】:python: assign time bins to rows using timestamp columnpython:使用时间戳列将时间箱分配给行
【发布时间】:2017-08-16 06:46:56
【问题描述】:

我有一个数据集,其中包含一些数值观察结果,其中包含开始和结束时间。我正在尝试为每个观察分配一个 bin,每个 bin 为 5 分钟,如果事务在该时间间隔内开始,则应分配该 bin。 (我探索了 pandas 中的重采样选项,但我找不到保留观察的独特属性的方法,例如数量)

data
id     start               end                 amt count
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1
1004 2017-07-01 08:09:30 2017-07-01 09:03:35 250   1
1006 2017-07-01 09:54:50 2017-07-01 10:26:31 50    1

timebins
0 00:00:00
1 00:05:00
2 00:10:00

期望的输出是,

id       start           end                 amt count    bin 
1004 2017-07-01 08:02:30 2017-07-01 10:02:30 250   1      08:00

【问题讨论】:

    标签: python pandas datetime


    【解决方案1】:

    由于数据可以直接用datetime格式,所以我用dt来访问时间

    def makebins(x):
        x=pd.to_datetime(x)
        return str(x.hour) + ":" + str(int(x.minute/5)*5)
    
    df["bins"] = df['start'].apply(makebins)
    

    【讨论】:

      【解决方案2】:

      您可以拼接开始时间戳字符串并向下舍入到最接近的 5 分钟间隔:

      def binify(timestamp):
          h, m, s = timestamp.split()[1].split(':')
          m = int(m)
          m = m - (m % 5) 
          return h + ':' + str(m).zfill(2)
      
      df['bin'] = [binify(x) for x in df['start']]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-30
        • 1970-01-01
        • 2014-07-02
        • 2016-12-07
        • 2022-01-22
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        相关资源
        最近更新 更多