使用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
相关产品推荐
相关产品推荐

