У меня есть DataFrame
некоторых транзакций. Я хочу сгруппировать эти транзакции в отношении значений столбцов item
и time
: цель состоит в том, чтобы группировать элементы, находящиеся в пределах 1 часа друг от друга. Поэтому мы начинаем новую группу во время следующего наблюдения, которое не было в течение часа после наблюдения (см. Колонку start time
в DataFrame
B
).Как группировать строки в течение периода времени с использованием Python
Вот данные: Я хочу преобразовать A
в B
.
A=
item time result
A 2016-04-18 13:08:25 Y
A 2016-04-18 13:57:05 N
A 2016-04-18 14:00:12 N
A 2016-04-18 23:45:50 Y
A 2016-04-20 16:53:48 Y
A 2016-04-20 17:11:47 N
B 2016-04-18 15:24:48 N
C 2016-04-23 13:20:44 N
C 2016-04-23 14:02:23 Y
B=
item start time end time Ys Ns total count
A 2016-04-18 13:08:25 2016-04-18 14:08:25 1 2 3
A 2016-04-18 23:45:50 2016-04-18 00:45:50 1 0 1
A 2016-04-20 16:53:48 2016-04-20 17:53:48 1 1 2
B 2016-04-18 15:24:48 2016-04-18 16:24:48 0 1 1
C 2016-04-23 13:20:44 2016-04-23 14:20:44 1 1 2
Вот что я сделал:
grouped = A.groupby('item')
A['end'] = (grouped['time'].transform(lambda grp: grp.min()+pd.Timedelta(hours=1)))
A2 = A.loc[(A['time'] <= A['end'])]
Это дает мне одну группу в день: сделки в течение 1 часа после первой операции. Таким образом, я пропускаю другие транзакции в тот же день, но более чем на 1 час от первого. Моя борьба заключается в том, как получить эти группы. Затем я смогу использовать pd.crosstab
, чтобы получить информацию, которую я хочу, из колонки result
.
Еще одна идея, которую я имею, заключается в сортировке A
по item
и time
, а затем перейти по строкам. Если время находится в пределах 1 часа от предыдущей строки, оно добавляется к этой группе, в противном случае создается новая группа.
Есть много вопросов, оставшихся без ответа. Как, сгруппированы в течение одного часа, когда? Один час первого наблюдения? Как насчет следующего часа? Началось ли это, когда последний час закончился? Или мы начинаем новый час во время следующего наблюдения, которое не было в течение часа после наблюдения? – piRSquared
что «сгруппировано» в вашем коде? Как ты получил это? – MaxU
@piRSquared Я добавил более подробную информацию к вопросу, чтобы уточнить. – Ana