如何从DataFrame中筛选所有活动均为view类型的用户
解决Pandas用户活动过滤问题
核心逻辑
先判定单条活动是否属于View类(默认以View为前缀判定,可根据实际规则调整),再按用户分组校验该用户的全部活动都符合View类要求,最后保留符合条件的用户的所有数据行。
代码实现
首先构造示例DataFrame:
import pandas as pd data = { "Name": ["John", "John", "John", "Ted", "Ted", "Amanda", "Amanda", "Lee", "Kathy"], "Activity": ["ViewReport", "UploadData", "ViewDashboard", "ViewReport", "DownloadData", "ViewReport", "ViewDashboard", "ViewDashboard", "ViewDataset"] } df = pd.DataFrame(data)
方法1:单步transform高效过滤
适合数据量较大的场景,不用拆分两次查询:
# 标记每条记录是否为View类活动 is_view_activity = df["Activity"].str.startswith("View") # 按用户分组,仅保留全活动都是View类的用户 filter_mask = df.groupby("Name")[is_view_activity].transform("all") result = df[filter_mask]
方法2:先查合法用户再过滤
逻辑更直观,适合小数据量场景:
# 筛选出所有符合要求的用户名 valid_users = df.groupby("Name").filter( lambda user_group: user_group["Activity"].str.startswith("View").all() )["Name"].unique() # 从原表过滤出对应用户的所有记录 result = df[df["Name"].isin(valid_users)]
输出结果
两种方法得到的结果完全一致:
Name Activity 5 Amanda ViewReport 6 Amanda ViewDashboard 7 Lee ViewDashboard 8 Kathy ViewDataset
内容的提问来源于stack exchange,提问作者Alice Wang
相关产品推荐
相关产品推荐

