python 每天的平均时间差

lf3rwulv  于 2023-01-11  发布在  Python
关注(0)|答案(1)|浏览(94)

我有一个用户活动的数据框架,包含用户ID和活动时间。我试图计算每个用户活动之间的平均时间差。当用户只活动了1天时,我已经成功地做到了这一点,但当用户活动了好几天时,我就很难做到了。
例如:
| 用户ID|活动日期|
| - ------| - ------|
| 1个|2021年7月26日下午8:29:01|
| 1个|2021年7月26日下午8:28:01|
| 1个|2021年7月26日下午8:32:01|
我使用了以下代码,它工作正常:

df.sort_values('Activity Date').groupby(['UserId'])['Activity Date'].apply(lambda x: x.diff().mean())

我的问题是,当用户在多天内处于活动状态时,使用我的代码,我仍然会得到一个平均值,但它不能以我需要的方式表示活动。
| 用户ID|活动日期|
| - ------| - ------|
| 1个|2021年7月25日下午8:29:01|
| 1个|2021年7月26日下午8:29:01|
| 1个|2021年7月26日下午8:32:01|
| 1个|2021年7月25日下午8:28:01|
我想先计算每天的平均值,然后再计算平均值的平均值。
我的代码给出了以下结果:481分333秒。
我希望它是:2分钟(对于25/07 - 1分钟差异,对于26/07 - 3分钟差异=〉,因此平均值为2分钟)。
我将非常感谢您的帮助或任何建议!
谢谢!

voj3qocg

voj3qocg1#

您可以执行两次groupby,首先对用户和日期执行,然后对用户执行:

df['Activity Date'] = pd.to_datetime(df['Activity Date'])

day = df['Activity Date'].dt.normalize()

out = (df
   .sort_values(by=['User ID', 'Activity Date'])
   .groupby(['User ID', day])
   .diff()
   .groupby(df['User ID']).mean()
)

输出:

Activity Date
User ID                
1       0 days 00:02:00

相关问题