你如何在 Python 中建模随时间变化的东西?

Oli*_*Oli 7 python time time-series

我正在寻找一种数据类型来帮助我模拟流动时间内的资源可用性。

  • 我们从 9 点到 6 点开放,可以处理 5 个并行作业。在我想象中的编程领域,我刚刚初始化了一个具有该范围的对象,其值为 3。
  • 我们在书上有约会,每个约会都有开始和结束时间。
  • 我需要把每一天都打出来
  • 这给我留下了可用性上升和下降的各种图表,但最终让我能够快速找到剩余可用性的时间范围。

我从多个方向解决了这个问题,但总是回到不知道数据类型来建模像整数这样简单的东西的基本问题。

我可以将我的约会转换为时间序列事件(例如,约会到达意味着 -1 可用性,约会离开意味着 +1)但我仍然不知道如何操作该数据,以便我可以提取可用性大于零的时间段.


有人以缺乏重点为由进行了近距离投票,但我在这里的目标似乎很单一,因此我将尝试以图形方式解释问题。我试图推断活动作业数量低于给定容量的时间段。

在此处输入图片说明

将一系列已知的并行容量(例如 9-6 之间的 3 个)和具有可变开始/结束的作业列表转换为可用时间的时间范围列表。

小智 8

我的方法是构建时间序列,但包括可用性对象,该对象的值设置为该期间的可用性。

availability: 
[
  {
    "start": 09:00,
    "end": 12:00,
    "value": 4
  },
  {
     "start": 12:00,
     "end": 13:00,
     "value": 3
  }
]
Run Code Online (Sandbox Code Playgroud)
data: [
  {
    "start": 10:00,
    "end": 10:30,
  }
]
Run Code Online (Sandbox Code Playgroud)

在开始/结束时间建立时间序列索引,以值作为值。可用性的开始时间是+值,结束时间是-值。对于事件,如您所说,它是 -1 或 +1。

"09:00" 4
"10:00" -1
"10:30" 1
"12:00" -4
"12:00" 3
"13:00" -3
Run Code Online (Sandbox Code Playgroud)

然后按索引、总和和累计总和分组。

得到:

"09:00" 4
"10:00" 3
"10:30" 4
"12:00" 3
"13:00" 0
Run Code Online (Sandbox Code Playgroud)

熊猫中的示例代码:

availability: 
[
  {
    "start": 09:00,
    "end": 12:00,
    "value": 4
  },
  {
     "start": 12:00,
     "end": 13:00,
     "value": 3
  }
]
Run Code Online (Sandbox Code Playgroud)

最后返回:

   start    end  value  available
0  00:00  09:00      0      False
1  09:00  13:00      4       True
2  13:00  00:00      0      False
Run Code Online (Sandbox Code Playgroud)