从创建和修改的时间戳生成积压数据

时间:2019-01-28 21:43:04

标签: python python-3.x pandas datetime

我有一个类似的数据集

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年1月28日02:05:00待办事项= 0

在2019年1月28日02:10:00积压= 1,因为已创建第一张发票但未修改

自2019年1月28日06:30:00积压后= 5,因为已创建第一张发票但未修改

我如何用熊猫生成它?

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

1 个答案:

答案 0 :(得分:2)

如果您可以假设在创建发票之前无法对其进行修改,则可以按5分钟 taken = composite(DateTimeTimeZone._make, taken_dt, taken,tz) class DateTimeTimeZone(object): def __init__(self, dt, tz): self.dt = dt self.tz = tz @classmethod def from_db(cls, dt, tz): return DateTimeTimeZone(dt, tz) @classmethod def from_dt(cls, dt): return DateTimeTimeZone(dt, dt.tzinfo) def __composite_values__(self): return (self.dt, self.tz) def value(self): #This is here so I can get the actual datetime.datetime object return datetime.datetime(self.dt, self.tz) 分组,然后减去.from_dt的分组,然后显示'Created Date' ,例如:

'Modified Date'

注意:这与您的示例相距5分钟,因为它显示了时间间隔的开始,例如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