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