【问题标题】:Generate backlog data from created and modified timestamps从创建和修改的时间戳生成积压数据
【发布时间】:2019-01-28 21:43:04
【问题描述】:

我有一个看起来像这样的数据集

Invoice Id Created Date        Modified Date      
107736     2019-01-28 02:05:07 2019-01-28 02:10:34
107737     2019-01-28 02:10:09 2019-01-28 02:15:50
107738     2019-01-28 03:16:28 2019-01-28 03:20:41
107739     2019-01-28 03:16:28 2019-01-28 03:20:54
107740     2019-01-28 05:57:04 2019-01-28 06:00:52
107741     2019-01-28 06:02:07 2019-01-28 06:05:54
107742     2019-01-28 06:27:14 2019-01-28 06:31:21
107743     2019-01-28 06:27:15 2019-01-28 06:30:51
107744     2019-01-28 06:27:15 2019-01-28 06:32:07
107745     2019-01-28 06:27:15 2019-01-28 06:31:46
107746     2019-01-28 06:27:15 2019-01-28 06:31:06
107747     2019-01-28 06:32:19 2019-01-28 06:36:17
107748     2019-01-28 06:32:19 2019-01-28 06:36:02
107749     2019-01-28 06:32:19 2019-01-28 06:35:43
107750     2019-01-28 06:37:22 2019-01-28 06:41:58
107751     2019-01-28 06:37:24 2019-01-28 06:40:48
107752     2019-01-28 06:37:25 2019-01-28 06:41:40
107753     2019-01-28 06:37:25 2019-01-28 06:41:02
107754     2019-01-28 06:37:25 2019-01-28 06:42:21
107755     2019-01-28 06:42:29 2019-01-28 06:47:04

我想生成一个数据集,每隔 5 分钟告诉我一次积压。

例如:在时间 2019-01-28 02:05:00 积压 = 0,因为不存在发票

在 2019-01-28 02:10:00 backlog = 1,因为第一张发票已创建但未修改

在 2019-01-28 06:30:00 积压 = 5,因为第一张发票已创建但未修改

如何用 pandas 生成这个?

更好地定义当时的积压t = ((df['Created Date'] < t) & (df['Modified Date'] > t)).sum()

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

    如果您可以假设在创建发票之前无法修改发票,那么您可以按 5 分钟分组 'Created Date' 并减去 'Modified Date' 的分组,然后显示 cumsum(),例如:

    In []:
    df1 = df.groupby(pd.Grouper(key='Created Date', freq='5Min'))['Invoice Id'].count()
    df2 = df.groupby(pd.Grouper(key='Modified Date', freq='5Min'))['Invoice Id'].count()
    df1.subtract(df2, fill_value=0).rename('Backlog').astype(int).cumsum()
    
    Out[]:
    2019-01-28 02:05:00    1
    2019-01-28 02:10:00    1
    2019-01-28 02:15:00    0
    2019-01-28 02:20:00    0
    2019-01-28 02:25:00    0
    ... snip ...
    2019-01-28 06:25:00    5
    2019-01-28 06:30:00    3
    2019-01-28 06:35:00    5
    2019-01-28 06:40:00    1
    2019-01-28 06:45:00    0
    Freq: 5T, Name: Backlog, dtype: int64
    

    注意:这比您的示例少了 5 分钟,因为它显示了时间间隔的开始,例如02:05 - 02:10 = 1。如果需要,您可以扩展索引以包含 02:00 - 02:05 = 0

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 2012-12-22
      • 1970-01-01
      • 2013-08-18
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多