Pandas按sid分组筛选url含全部指定子串的分组数据实现方法
Pandas实现代码
该需求可以直接用pandas的分组过滤方法实现,逻辑简洁且效率较高:
第一步:导入依赖与构造测试数据
import pandas as pd # 构造测试数据集 data_dict = { 'vid': {1:'A',2:'A',3:'A',4:'A',5:'B',6:'B',7:'B',8:'C'}, 'sid': {1:'A1',2:'A1',3:'A1',4:'A1',5:'B1',6:'B2',7:'B2',8:'C1'}, 'pid': {1:'page',2:'page',3:'page',4:'page',5:'page',6:'page',7:'page',8:'page'}, 'url': {1:'ABCDEF',2:'DEF123',3:'GHI345',4:'JKL345',5:'AB12345EF',6:'IJK',7:'XYZ',8:'ABCEF'} } df = pd.DataFrame(data_dict) # 待匹配子串列表 lst = ['AB', 'EF']
第二步:核心过滤逻辑
使用groupby.filter方法直接对分组做整体过滤:
result_df = df.groupby('sid').filter( lambda x: x['url'].apply(lambda url: all(sub in url for sub in lst)).any() )
逻辑说明
- 首先按照
sid字段对整个DataFrame做分组 - 对每个分组,遍历所有
url值,判断单个url是否包含lst中的全部子串 - 只要分组内存在至少1个符合要求的url,就保留该分组的全部行,否则直接剔除整个分组
- 最终输出的
result_df和你给出的预期结果完全一致
内容的提问来源于stack exchange,提问作者S44
相关产品推荐
相关产品推荐

