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

如何使用Pandas计算月度维度的3个月滚动活跃用户数量

实现方案

核心思路

  • 先把原始数据转为「用户×月度」的活跃矩阵,每个位置标记1代表用户当月活跃,0代表不活跃
  • 对每个用户的月度活跃序列做3个月窗口滚动求和,求和结果等于3即满足连续3个月活跃的条件
  • 按月份统计满足条件的用户总数,前2个月因窗口长度不足返回空值

完整代码实现

import pandas as pd

# 1. 加载数据并格式化日期列
data = {
    'MONTH': ['2021-04-01', '2021-04-01', '2021-05-01', '2021-06-01', '2021-06-01', '2021-07-01', '2021-07-01', '2021-08-01', '2021-08-01'],
    'User': ['A', 'B', 'B', 'A', 'B', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
df['MONTH'] = pd.to_datetime(df['MONTH'])

# 2. 构造用户-月度活跃矩阵
user_month_active = df.pivot_table(
    index='User', 
    columns='MONTH', 
    aggfunc='size', 
    fill_value=0
)

# 【可选补充】如果存在整月无任何活跃的情况,先补全连续月份,避免窗口错位
# all_months = pd.date_range(start=df['MONTH'].min(), end=df['MONTH'].max(), freq='MS')
# user_month_active = user_month_active.reindex(columns=all_months, fill_value=0)

# 3. 计算3个月滚动活跃标记,求和等于3代表连续3个月活跃
rolling_active = user_month_active.rolling(window=3, axis=1).sum() == 3

# 4. 按月份统计符合条件的用户数
result = rolling_active.sum().reset_index(name='Active_User_Count')
# 前2个月替换为NaN,匹配预期输出
result.loc[[0,1], 'Active_User_Count'] = pd.NA

print(result)

输出结果

运行上述代码得到的结果和你期望的完全一致:

MONTH  Active_User_Count
0 2021-04-01                <NA>
1 2021-05-01                <NA>
2 2021-06-01                   1
3 2021-07-01                   1
4 2021-08-01                   2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:03