开发者社区> 问答> 正文

如何将时间转换为DataFrame Python中的相应插槽

我有一个数据框

import pandas as pd
d = {'name':['a','b','c'],'time': ['18:15:10','06:16:03','11:51:01']}
df = pd.DataFrame(data=d)

我计划将时间转换为一个插槽。例如,将时间(('00:00:00'-'00:59:59')中的地图时间设置为“ 1”,将时间在((8:00:00'-'8:59:59')中)作为9

我如何在df中添加一列,这样我的最终df是

name    time          slot
'a'     '18:15:10'      18

如果我将('00:00:00'-'5:59:59')中的时间转换为1怎么办?在这种情况下,我的时隙有很大的时间间隔。

谢谢

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 14:26:02 498 0
1 条回答
写回答
取消 提交回答
  • 希望我正确理解了您的想法。

    首先,将您的time列转换为timedelta64:

    df['time']=pd.to_timedelta(df['time'])
    

    如果只想在x小时内转换时间,答案很简单:

    import numpy as np
    x = 5
    ranges = [(i,i+x) for i in range(0,24,x)]
    df['slot'] = df['time'].apply(lambda x:[t<= (x/np.timedelta64(1, 'h')) <T for t,T in ranges].index(True)+1)
    

    结果:

    +----+--------+-----------------+--------+
    |    | name   | time            |   slot |
    |----+--------+-----------------+--------|
    |  0 | a      | 0 days 18:15:10 |      4 |
    |  1 | b      | 0 days 06:16:03 |      2 |
    |  2 | c      | 0 days 11:51:01 |      3 |
    +----+--------+-----------------+--------+
    

    而且,如果您想要自定义灵活的时间范围(可能与* h:m:s`*一样精确),则应该:

    ranges = [('0:0:0','12:0:0'),('12:0:0','23:59:59')]
    ranges = [pd.to_timedelta(i) for i in ranges]
    df['slot'] = df['time'].apply(lambda x:[t<=x<T for t,T in ranges].index(True)+1)
    

    结果:

    +----+--------+-----------------+--------+
    |    | name   | time            |   slot |
    |----+--------+-----------------+--------|
    |  0 | a      | 0 days 18:15:10 |      2 |
    |  1 | b      | 0 days 06:16:03 |      1 |
    |  2 | c      | 0 days 11:51:01 |      1 |
    +----+--------+-----------------+--------+
    

    回答来源:stackoverflow

    2020-03-24 14:26:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载