You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pandas计算用户跨多天的日均活动间隔均值?

解决用户活动间隔平均时长的计算问题

你的原代码直接在User ID + week分组下计算所有活动时间的间隔均值,这会把跨天的长间隔(比如前一天最后一次活动到次日第一次活动的间隔)也纳入计算,导致结果偏离预期。而你需要的是先计算单日内的活动间隔均值,再对这些单日均值求平均,得到每周的最终结果。

具体解决步骤

1. 预处理日期字段

先确保Activity Date是datetime类型,并提取纯日期部分用于按天分组:

import pandas as pd

# 转换为datetime类型(如果还不是的话)
d['Activity Date'] = pd.to_datetime(d['Activity Date'])
# 提取日期(不含时分秒)
d['activity_day'] = d['Activity Date'].dt.date

2. 计算单日活动间隔均值

按User ID + week + activity_day分组,计算每天内的活动间隔均值(跳过diff产生的NaN值):

daily_interval_avg = d.sort_values('Activity Date').groupby(['User ID', 'week', 'activity_day'])['Activity Date'].apply(
    lambda x: x.diff().dropna().mean()
).dt.total_seconds() / 60  # 转换为分钟单位

3. 计算每周的日均均值的平均值

再按User ID + week分组,对单日均值求平均,得到最终结果:

weekly_final_avg = daily_interval_avg.groupby(['User ID', 'week']).mean()

合并后的完整代码

import pandas as pd

# 日期预处理
d['Activity Date'] = pd.to_datetime(d['Activity Date'])
d['activity_day'] = d['Activity Date'].dt.date

# 分步计算:单日间隔均值 → 每周平均
weekly_final_avg = (
    d.sort_values('Activity Date')
    .groupby(['User ID', 'week', 'activity_day'])['Activity Date']
    .apply(lambda x: x.diff().dropna().mean())
    .dt.total_seconds() / 60
    .groupby(['User ID', 'week'])
    .mean()
)

逻辑说明

这个流程完全符合你的需求:先过滤掉跨天的无效间隔,只计算每天内的活动间隔均值,再将这些单日均值做平均,得到用户每周的活动间隔平均时长。比如你提到的week1示例,假设每天的间隔均值都是2分钟,最终结果就是2分钟,不会被跨天的长间隔干扰。

内容的提问来源于stack exchange,提问作者kri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 15:45:36