我有一个类似的数据集
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()
时积压的更好定义
答案 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
。