按前两个最早的日期分组,然后按前两个日期之间的平均时间分组-熊猫

时间:2018-11-16 21:24:35

标签: python pandas

我希望对用户进行分组并找到前两个上载内容。我已经弄清楚了如何通过最少的时间来获取第一个日期,但是我在获取那个第二个上传日期时遇到了麻烦。然后想获取所有用户在两次上传日期之间的平均时间。

df:

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 :(得分:2)

使用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

答案 1 :(得分:0)

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')

答案 2 :(得分:0)

由于其他答案很好地说明了如何实现这一目标,因此我将为您提供一线改变的机会

 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')