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

如何从用户活动数据中提取唯一用户及最早活动日期?

提取用户最早活动日期的解决方案

原始数据集

userdateactivity
Tom1/1/21Hop
Dick1/2/21Skip
Harry2/2/21Jump
Tom1/3/21Skip
Dick1/4/21Jump

目标结果

userfirst activity
Tom1/1/21
Dick1/2/21
Harry2/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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:01:06