Сгруппировать первые две самые ранние даты, затем среднее время между первыми двумя датами - панды - PullRequest
0 голосов
/ 17 ноября 2018

Я надеюсь сгруппировать пользователей и найти первые две загрузки. Я понял, как получить первое свидание за минимальное время, но у меня проблемы с получением второй даты закачки. Затем хотелось бы получить среднее время между двумя датами загрузки для всех пользователей.

ДФ:

Date_Uploaded  User_ID  Display_Status
2018-10-27     abc123   Cleared
2018-10-28     abc123   Cleared
2018-10-29     abc123   Pending
2018-09-21     abc123   Pending
2018-08-24     efg123   Pending
2018-08-01     efg123   Pending
2018-07-25     efg123   Pending

Ответы [ 3 ]

0 голосов
/ 17 ноября 2018

sort, вычислите разницу, а затем groupby + nth(1), чтобы получить разницу между первыми загрузками, если она существует (пользователи с 1 датой не будут отображаться).

import pandas as pd

df['Date_Uploaded'] = pd.to_datetime(df.Date_Uploaded)
df = df.sort_values(['User_ID', 'Date_Uploaded'])

df.Date_Uploaded.diff().groupby(df.User_ID).nth(1)

#User_ID
#abc123   36 days
#efg123    7 days
#Name: Date_Uploaded, dtype: timedelta64[ns]

Если вы просто хотите получить среднее значение, то усредните этот ряд:

df.Date_Uploaded.diff().groupby(df.User_ID).nth(1).mean()
#Timedelta('21 days 12:00:00')
0 голосов
/ 17 ноября 2018

Поскольку другие ответы довольно хорошо объясняют, как этого добиться, я дам вам одну строчку для изменения

 In [1]: df.groupby('User_ID').apply(lambda g: g.sort_values('Date_Uploaded')['Date_Uploaded'][:2].diff()).mean()
 Out[1]: Timedelta('21 days 12:00:00')
0 голосов
/ 17 ноября 2018

Использование sort_values + head

df.sort_values('Date_Uploaded').groupby('User_ID').head(2)
Out[152]: 
  Date_Uploaded User_ID Display_Status
6    2018-07-25  efg123        Pending
5    2018-08-01  efg123        Pending
3    2018-09-21  abc123        Pending
0    2018-10-27  abc123        Cleared
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...