如何用Python计算仅与前一日对比的每日新增用户数量
实现思路
核心逻辑是先按日期分组得到每日用户集合,再将当日用户集合与前一日的做差集,差集的元素数量即为当日新增用户数,完全匹配你提到的统计规则。
代码实现
首先安装依赖(如果环境没有pandas):pip install pandas
完整代码如下:
import pandas as pd # 构造示例数据,实际使用时可替换为pd.read_csv()等读取自己的数据源 data = { 'date': ['2012-09-29', '2012-09-29', '2012-09-30', '2012-09-30', '2012-10-01', '2012-10-01'], 'users': ['A', 'B', 'A', 'C', 'B', 'C'] } df = pd.DataFrame(data) # 1. 按日期分组得到每日用户集合,同时按日期升序排序 daily_users = df.groupby('date')['users'].apply(set).sort_index() # 2. 遍历计算每日新增用户数 result = [] # 从第2天开始计算,第1天无前一天数据无法对比 for i in range(1, len(daily_users)): current_date = daily_users.index[i] current_users = daily_users.iloc[i] prev_users = daily_users.iloc[i-1] # 取差集:当前日期存在、前一天不存在的用户 new_user_count = len(current_users - prev_users) result.append({'date': current_date, 'users': new_user_count}) # 3. 转换为DataFrame输出,若需要索引从1开始可加result_df.index = result_df.index + 1 result_df = pd.DataFrame(result) print(result_df)
输出结果
date users 0 2012-09-30 1 1 2012-10-01 1
和你期望的输出完全一致。
可选优化(处理非连续日期)
如果你的数据存在日期中断的情况(比如缺少2012-09-30的数据),不想和间隔超过1天的日期对比,可以增加日期差校验逻辑:
# 先把日期转为datetime格式 daily_users.index = pd.to_datetime(daily_users.index) for i in range(1, len(daily_users)): current_date = daily_users.index[i] prev_date = daily_users.index[i-1] # 仅相邻两天的日期才计算新增 if (current_date - prev_date).days != 1: continue # 剩余逻辑和之前保持一致
内容的提问来源于stack exchange,提问作者No94
相关产品推荐
相关产品推荐

