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

Pandas按月份分组统计新增独立用户数的实现方法

Pandas 月度新增独立用户数统计实现

需求背景

现有按月份Month分组的DataFrame,样例构建代码如下:

import pandas as pd

df = pd.DataFrame({'Month': [2, 2, 3, 3],
                   'user': ['Michael', 'Michael', 'Lea', 'Michael']})

对应数据样例:

Month     user
0      2  Michael
1      2  Michael
2      3      Lea
3      3  Michael

需要统计两个指标:

  • 每月总独立用户数
  • 每月新增独立用户数:仅统计当月首次在全量数据中出现的用户,历史月份已出现过的用户不计入

其中每月总独立用户数可通过现有代码实现:

df.groupby(['Month'])['user'].nunique()

运行结果:

Month
2    1
3    2

预期新增独立用户数的输出结果:

Month     Unique_Count_New_Users
0      2     1
1      3     1      # 相比2月Lea是新用户,Michael不是

补充测试样例

为验证全量历史匹配的逻辑,使用更复杂的测试数据集:

import pandas as pd

df = pd.DataFrame({'Month':[2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4],
                   'user':['Michael', 'Michael', 'Markus', 'Moritz', 'Lea', 
                           'Michael', 'Stefan', 'Dora', 'Erika',
                           'Dora', 'Markus']})

对应数据样例:

Month     user
0       2  Michael
1       2  Michael
2       2   Markus
3       2   Moritz
4       2      Lea
5       3  Michael
6       3   Stefan
7       3     Dora
8       3    Erika
9       4     Dora
10      4   Markus

实现方案

不需要逐分组做复杂的逐元素对比,通过Pandas内置的重复值标记方法即可实现,核心逻辑是:先按月份排序保证时间顺序,再标记用户第一次出现的记录,最后按月份统计首次出现的用户数量即可。

# 首先对DataFrame按月份排序,保证时间顺序正确
df.sort_values(by='Month', inplace=True)

# 统计每月总独立用户数
monthly_total_unique = df.groupby(['Month'])['user'].nunique()

# 统计每月新增独立用户数:~ 为取反运算符,duplicated()会标记重复出现的用户,取反后首次出现的用户为True,按月份求和即可
monthly_new_unique = (~df['user'].duplicated()).groupby(df['Month']).sum()

运行补充测试样例的新增用户统计结果:

Month
2    4
3    3
4    0

完全符合预期:2月4个用户都是首次出现,3月新增Stefan、Dora、Erika3个新用户,4月的两个用户都在之前月份出现过,新增数为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:18:04