Генерировать данные журнала невыполненных работ из созданных и измененных временных отметок. - PullRequest
0 голосов
/ 29 января 2019

У меня есть набор данных, который выглядит как

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 backlog = 0, так как счет не существует

В 2019-01-28 02:10:00 backlog = 1, так как 1-й счет был создан, но не изменен

В 2019-01-28 06:30:00 backlog = 5, так как 1-й счет был создан, но не изменен

Как мне сгенерировать это с пандами?

Лучшее определение отставания во время t = ((df['Created Date'] < t) & (df['Modified Date'] > t)).sum()

1 Ответ

0 голосов
/ 29 января 2019

Если вы можете предположить, что никакая накладная не может быть изменена до ее создания, вы можете просто сгруппировать ее на 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, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...