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

使用Pandas按年月统计新增独立用户数的实现方法

解决按年月统计新增独立用户的Pandas方案

我来帮你搞定这个需求——每个用户只在首次出现的年月被计数,后续重复出现的记录直接忽略,对吧?下面是具体的实现步骤和代码:

步骤1:准备示例数据

首先我们先把你给出的DataFrame创建出来:

import pandas as pd

# 你的原始数据
data = {
    'User': [1, 1, 2, 3, 7, 3],
    'Month': [3, 4, 4, 5, 8, 5],
    'Year': [2010, 2010, 2010, 2010, 2011, 2011]
}
df = pd.DataFrame(data)

步骤2:过滤出每个用户的首次出现记录

核心是只保留每个用户第一次出现的行,后续重复的直接丢弃。这里有两种简洁的实现方式:

方法一:分组聚合取最早年月

通过按用户分组,提取每个用户最早出现的年份和月份,确保只保留首次记录:

# 按User分组,获取每个用户首次出现的Year和Month
first_occur = df.groupby('User').agg({'Year': 'min', 'Month': 'min'}).reset_index()

方法二:去重保留首次行

直接对User列去重,只保留每个用户在DataFrame中第一次出现的行:

# 保留每个用户的第一条记录(首次出现的行)
first_occur = df.drop_duplicates(subset='User', keep='first')

两种方法得到的结果完全一致,都是每个用户仅保留首次出现的那条记录。

步骤3:按年月分组统计新增用户数

接下来只需要按Year和Month分组,统计每组的用户数量,就是对应年月的新增独立用户数:

# 按年月分组,计算新增用户数
new_users_stats = first_occur.groupby(['Year', 'Month']).size().reset_index(name='New_Users')

最终结果

运行上述代码后,new_users_stats的输出如下:

Year  Month  New_Users
0  2010      3          1
1  2010      4          1
2  2010      5          1
3  2011      8          1

完全符合你的预期:2010年3月新增用户1,2010年4月新增用户2(用户1因已在3月出现不计入),2010年5月新增用户3,2011年8月新增用户7(用户3在2010年已首次出现,2011年的记录不会被统计)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:11