Стандартное отклонение разницы между датами в группе панд по

1

У меня есть блок данных транзакций. Один из моих столбцов - дата (datetime64 [ns]). Я делаю группу пользователей (электронная почта как id). Меня интересует изменчивость времени между заказами каждого пользователя. Так что я ищу в группе, чтобы найти стандартное отклонение разницы между датами (в днях) для каждого пользователя. Если у пользователя две или менее транзакции, ответ должен быть равен 0. Это часть фрейма данных (я изменил некоторые вещи вручную):

df

                  email                       date
0                 [email protected]     2018-05-01 12:29:59
1                   [email protected]     2018-07-11 13:43:22
2                 [email protected]     2018-09-21 12:29:23
3             [email protected]     2018-09-01 09:21:43
4                    [email protected]     2018-04-30 12:29:30
5             [email protected]     2018-03-22 12:29:23
6           [email protected]     2018-07-21 12:29:17
7                 [email protected]     2018-08-11 12:29:41
8                   [email protected]     2018-05-23 12:29:14
9                    [email protected]     2018-06-01 12:29:17
10               [email protected]     2018-07-18 12:29:20
11                [email protected]     2018-08-21 12:29:40
12                  [email protected]     2018-10-01 12:29:31
13            [email protected]     2018-06-01 12:29:20
14              [email protected]     2018-05-21 12:29:18
15             [email protected]     2018-07-20 12:29:59

Я пробовал много способов, но все равно не могу это получить. Пожалуйста помоги.

  • 1
    А что происходит, когда у пользователя больше 2 дат? Делаем ли мы все попарные комбинации или только последовательные различия?
Теги:
pandas
pandas-groupby
standard-deviation

1 ответ

2
Лучший ответ

Для последовательных различий, которые, кажется, имеют наибольший смысл с учетом вашего объяснения:

df.sort_values('date').groupby('email').apply(lambda x: x.date.diff().std()).fillna(0)

Выход:

email
[email protected]              0 days 00:00:00
[email protected]         48 days 05:04:12.988006
[email protected]           0 days 00:00:00
[email protected]                0 days 00:00:00
[email protected]                    0 days 00:00:00
[email protected]               0 days 00:00:00
[email protected]     14 days 18:10:16.764069
[email protected]           23 days 06:17:04.453408
dtype: timedelta64[ns]

.std() будет пустым для групп с 1 значением, отличным от нуля, и поскольку. diff уменьшает количество ненулевых наблюдений на 1, это автоматически возвращает NaN для любых групп с 2 или менее измерениями, которые мы заполняем 0.

Также просто знайте, что по умолчанию для pandas следует использовать N-1 степени свободы.

  • 0
    .diff() вычисляет первое различие дат в каждой группе (т. е. текущая строка - предыдущая строка), но здесь необходимо вычесть одну и ту же (произвольную) дату из каждой даты.
  • 1
    @PeterLeimbigler это немного неоднозначно. Они хотят «изменчивость времени между заказами каждого пользователя». Поэтому в моем случае я вычисляю время между заказами (последовательно), а затем нахожу изменчивость. Я думаю, что это имеет больше смысла, потому что в ваших расчетах стандартное отклонение неизбежно растет, поскольку пользователи продолжают размещать больше заказов. Т.е. у кого-то с заказами с 2011 по 2017 год будет больше «изменчивости» в вашем определении, чем у сомоен с заказами между 2016–2017, даже если они размещают заказ каждую неделю.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню