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

Pandas如何按用户分组筛选各用户最早观影日期对应的影片及日期记录

实现方法

首先先把Date列转换为 pandas 可识别的时间格式,避免字符串排序出现异常:

import pandas as pd
# 你的原始数据
watched_df = pd.DataFrame([['Love Death Robots', '2016-01-29 14:04:22', 'Anna'], 
                   ['James Bond', '2016-02-29 14:04:22', 'Anna'],
                   ['Lord of the Rings', '2016-09-29 14:04:22', 'BoB'], 
                   ['The Hobbit', '2016-10-29 14:04:22', 'Anna'],
                   ['Beauty and the Beast', '2016-06-29 14:04:22', 'BoB']], 
                  columns=['Title', 'Date', 'Profile_Name'])
# 转换时间格式
watched_df['Date'] = pd.to_datetime(watched_df['Date'])

方法1:排序后去重(最简便)

按Date升序排序后,按Profile_Name字段去重,保留首次出现的记录即可:

wanted_df = watched_df.sort_values('Date').drop_duplicates('Profile_Name', keep='first')

方法2:基于分组取最小时间的索引

直接通过分组定位最早记录的行索引,直接取对应行即可:

# 取每个用户最早观影记录的行索引
min_date_idx = watched_df.groupby('Profile_Name')['Date'].idxmin()
# 按索引取对应行
wanted_df = watched_df.loc[min_date_idx].reset_index(drop=True)

方法3:匹配已有最小日期表

如果你已经提前生成了各用户对应最早观影日期的df(以Profile_Name为索引、Date为值,假设命名为min_date_df),可以直接用merge关联拿到对应Title:

wanted_df = watched_df.merge(min_date_df.reset_index(), on=['Profile_Name', 'Date'])

以上三种方法输出的结果都和你预期的一致,如果需要保留原始索引可以去掉reset_index部分。

内容的提问来源于stack exchange,提问作者Sebastian ten Berge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:04