【问题标题】:Binning time column in PythonPython中的分箱时间列
【发布时间】:2019-10-30 18:14:12
【问题描述】:

我的 Pandas 数据框中有一个日期时间列(作为对象类型)。我将 datetime 列拆分为两列日期和时间,并使用 to_datetime 将两者转换为以下格式,并使用以下代码:

 df['Time'] =  pd.to_datetime(df['Time'], format='%H:%M:%S').dt.time
 df['Date'] =  pd.to_datetime(df['Date'], format='%Y.%m.%d')

在上面的代码执行之后,我有了 Datetime 类型的 Date 列和 object 类型的 Time 列(例如,00:14:53)——我不知道为什么没有 Datetime,因为我使用了 to_datetime——

我想将时间列分成 4 个类别/箱,00:00:00 - 06:00:00 作为类别 1,然后是 06:00:00 到 12:00:00 等等。

我尝试了不同的剪辑方法,但都错了。

我做错了什么,有什么帮助吗?

谢谢

【问题讨论】:

  • 发布一些数据示例
  • 日期栏:2018-01-01 时间栏:00:05:06
  • 和想要的输出?

标签: python pandas time


【解决方案1】:

通过Series.dt.hourTime 列转换为小时,并使用cut 进行分箱:

rng = pd.date_range('2017-04-03', periods=30, freq='H').strftime('%H:%M:%S')
df = pd.DataFrame({'Time': rng}) 

hours = pd.to_datetime(df['Time'], format='%H:%M:%S').dt.hour

df['cats'] = pd.cut(hours, 
                    bins=[0,6,12,18,24], 
                    include_lowest=True, 
                    labels=['cat1','cat2','cat3','cat4'])

print (df)
        Time  cats
0   00:00:00  cat1
1   01:00:00  cat1
2   02:00:00  cat1
3   03:00:00  cat1
4   04:00:00  cat1
5   05:00:00  cat1
6   06:00:00  cat1
7   07:00:00  cat2
8   08:00:00  cat2
9   09:00:00  cat2
10  10:00:00  cat2
11  11:00:00  cat2
12  12:00:00  cat2
13  13:00:00  cat3
14  14:00:00  cat3
15  15:00:00  cat3
16  16:00:00  cat3
17  17:00:00  cat3
18  18:00:00  cat3
19  19:00:00  cat4
20  20:00:00  cat4
21  21:00:00  cat4
22  22:00:00  cat4
23  23:00:00  cat4
24  00:00:00  cat1
25  01:00:00  cat1
26  02:00:00  cat1
27  03:00:00  cat1
28  04:00:00  cat1
29  05:00:00  cat1

【讨论】:

  • @Er1Hall - 欢迎您!还稍微改进了解决方案,所以编辑了答案。
【解决方案2】:
  1. 将日期转换为 unix 时间戳
def convert_to_unix(s):
    return time.mktime(datetime.strptime(s, "%Y-%m-%d %H:%M:%S").timetuple())
  1. 然后将时间戳从秒 (60*60) 转换为小时,然后除以时间间隔(本例中为 6 小时)
df['bins'] = np.array(  [ int ( convert_to_unix(i) / 60 * 60 * 6) for i in df['Time']]  )

之后您可以更改类别。

【讨论】:

    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2020-05-20
    相关资源
    最近更新 更多