如何用DataFrame筛选Andy和Frank共同存在的日期对应的行?
解决方法
首先,先把你的数据用Pandas构造出可运行的DataFrame(新手可以直接复制这段代码):
import pandas as pd data = { 'date': ['2022-08-01', '2022-08-04', '2022-08-05', '2022-08-01'], 'user': ['Andy', 'Mary', 'Marc', 'Frank'] } df = pd.DataFrame(data)
下面提供两种适合新手的直观方法实现需求:
方法一:groupby + filter(最易理解)
先指定要匹配的用户集合,再按日期分组,筛选出包含所有目标用户的分组:
# 定义需要同时存在的用户 target_users = {'Andy', 'Frank'} # 筛选出同时包含Andy和Frank的日期对应的所有行 result = df.groupby('date').filter(lambda group: target_users.issubset(group['user']))
方法二:先找符合条件的日期,再筛选行
先统计每个日期对应的用户集合,找出包含目标用户的日期,再用这些日期过滤原数据:
target_users = {'Andy', 'Frank'} # 按日期分组,得到每个日期对应的用户集合 date_user_sets = df.groupby('date')['user'].apply(set) # 筛选出包含所有目标用户的日期 valid_dates = date_user_sets[date_user_sets >= target_users].index # 用这些日期过滤原DataFrame result = df[df['date'].isin(valid_dates)]
两种方法运行后,result就是你需要的结果:
date user 0 2022-08-01 Andy 3 2022-08-01 Frank
内容的提问来源于stack exchange,提问作者goldie
相关产品推荐
相关产品推荐

