如何从用户活动数据中提取唯一用户及最早活动日期?
提取用户最早活动日期的解决方案
原始数据集
| user | date | activity |
|---|---|---|
| Tom | 1/1/21 | Hop |
| Dick | 1/2/21 | Skip |
| Harry | 2/2/21 | Jump |
| Tom | 1/3/21 | Skip |
| Dick | 1/4/21 | Jump |
目标结果
| user | first activity |
|---|---|
| Tom | 1/1/21 |
| Dick | 1/2/21 |
| Harry | 2/2/21 |
实现方法
方法一:高效分组法(推荐)
不需要单独提取唯一用户数组,直接用Pandas的groupby结合min()一步到位,代码简洁且性能更优:
import pandas as pd # 先将date列转为日期类型,避免字符串排序错误 user_actions['date'] = pd.to_datetime(user_actions['date'], format='%m/%d/%y') # 按用户分组,取每组最早的活动日期 first_activity_df = user_actions.groupby('user')['date'].min().reset_index() # 修改列名匹配目标格式 first_activity_df.rename(columns={'date': 'first activity'}, inplace=True) # 可选:转回原日期字符串格式 first_activity_df['first activity'] = first_activity_df['first activity'].dt.strftime('%m/%d/%y')
方法二:基于已有唯一用户数组实现
如果一定要用你已经获取的unique_users数组,可以通过循环筛选生成结果:
import pandas as pd # 转换date列为日期类型 user_actions['date'] = pd.to_datetime(user_actions['date'], format='%m/%d/%y') unique_users = user_actions['user'].unique() result_list = [] for user in unique_users: # 筛选当前用户的所有记录,取最早日期 earliest_date = user_actions[user_actions['user'] == user]['date'].min() # 转回原字符串格式(可选) earliest_date_str = earliest_date.strftime('%m/%d/%y') result_list.append({'user': user, 'first activity': earliest_date_str}) # 转换为DataFrame first_activity_df = pd.DataFrame(result_list)
关键说明
- 必须先将
date列转换为日期类型,否则字符串形式的日期会按字符顺序排序(比如"1/10/21"会被错误判定为早于"1/2/21")。 - 方法一的
groupby是Pandas处理分组聚合的最优方式,数据量越大,对比循环方法的效率优势越明显。
内容的提问来源于stack exchange,提问作者Tom Hughes
相关产品推荐
相关产品推荐

