Pandas按条件筛选行:保留特定日期下状态以success结尾的ID全量数据
解决方案
你可以通过以下步骤实现需求:
- 识别出每个
(Id, Date)分组中是否包含success状态 - 保留所有属于这些符合条件分组的记录
方法一:使用groupby.transform
import pandas as pd # 构造示例DataFrame data = { 'Id': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], 'Date': ['26-01-2022', '26-01-2022', '27-01-2022', '27-01-2022', '27-01-2022', '01-02-2022', '01-02-2022', '02-02-2022', '02-02-2022'], 'Status': ['begin', 'failed', 'begin', 'in-process', 'success', 'in-process', 'success', 'begin', 'failed'] } df = pd.DataFrame(data) # 标记每个分组是否包含success df['has_success'] = df.groupby(['Id', 'Date'])['Status'].transform(lambda x: 'success' in x.values) # 过滤出符合条件的记录并删除辅助列 result = df[df['has_success']].drop('has_success', axis=1) print(result)
方法二:提取成功分组后合并
# 获取所有包含success的(Id, Date)组合 success_pairs = df[df['Status'] == 'success'][['Id', 'Date']].drop_duplicates() # 合并原DataFrame与成功分组,保留匹配的记录 result = df.merge(success_pairs, on=['Id', 'Date']) print(result)
两种方法都会输出你期望的结果:
Id Date Status 0 A 27-01-2022 begin 1 A 27-01-2022 in-process 2 A 27-01-2022 success 3 B 01-02-2022 in-process 4 B 01-02-2022 success
内容的提问来源于stack exchange,提问作者Roshankumar
相关产品推荐
相关产品推荐

