Python中如何按特定日期标记条件删除数据集内的ID
问题
我有一个包含ID、Date、Flagged字段的数据集,需要完全移除所有存在**2023年5月1日之前标记(Flagged=1)**记录的ID。尝试了一段Python代码,但仍有不符合要求的ID未被移除,附上原始数据集、尝试的代码及期望输出,请求帮助实现正确的过滤逻辑。
原始数据集
ID Date Flagged 101 6/4/2023 0 101 7/23/2023 0 102 4/28/2023 1 102 5/2/2023 1 102 6/30/2023 1 102 7/11/2023 1 103 6/23/2023 1 103 7/12/2023 1 104 4/17/2023 0 104 5/12/2023 1 104 6/17/2023 1 104 7/22/2023 1
尝试的代码
today = datetime.datetime.today() x_days = today - dt(days=90) filtered_df = df[(df['Flagged'] == 1) & (df['Date'] >= x_days)]
(注:原代码存在语法错误,如括号不匹配、Date字段名后缺少闭合引号,且逻辑未匹配需求)
期望输出
ID Date Flagged 103 6/23/2023 1 103 7/12/2023 1 104 5/12/2023 1 104 6/17/2023 1 104 7/22/2023 1
解决方法
核心逻辑:先定位所有在2023-05-01之前有Flagged=1记录的ID,再从原数据中剔除这些ID的全部记录。具体步骤如下:
- 转换日期格式:将
Date列转为datetime类型,确保日期比较的有效性 - 识别需排除的ID:筛选出满足
Date < '2023-05-01'且Flagged=1的记录,提取对应的唯一ID集合 - 过滤数据集:保留不在排除ID集合中的所有记录(若需和期望输出完全一致,可再过滤Flagged=1的记录)
完整代码
import pandas as pd from datetime import datetime # 构造原始数据集(实际场景可替换为读取文件) data = { 'ID': [101, 101, 102, 102, 102, 102, 103, 103, 104, 104, 104, 104], 'Date': ['6/4/2023', '7/23/2023', '4/28/2023', '5/2/2023', '6/30/2023', '7/11/2023', '6/23/2023', '7/12/2023', '4/17/2023', '5/12/2023', '6/17/2023', '7/22/2023'], 'Flagged': [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1] } df = pd.DataFrame(data) # 步骤1:转换Date列为datetime类型 df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y') # 步骤2:提取需要排除的ID exclude_ids = df[(df['Date'] < '2023-05-01') & (df['Flagged'] == 1)]['ID'].unique() # 步骤3:过滤掉需排除的ID的所有记录 filtered_df = df[~df['ID'].isin(exclude_ids)] # 可选:若需和期望输出完全一致,仅保留Flagged=1的记录 filtered_df = filtered_df[filtered_df['Flagged'] == 1] # 格式化日期为原数据显示格式并输出 filtered_df['Date'] = filtered_df['Date'].dt.strftime('%m/%d/%Y') print(filtered_df.to_string(index=False))
代码说明
pd.to_datetime:将字符串日期转为datetime类型,避免字符串比较的逻辑错误exclude_ids:通过unique()去重,确保每个需排除的ID只记录一次~df['ID'].isin(exclude_ids):~表示取反,保留不在排除列表中的ID的所有记录- 最后格式化日期为原数据的
月/日/年格式,方便和期望输出对比
运行结果
ID Date Flagged 103 06/23/2023 1 103 07/12/2023 1 104 05/12/2023 1 104 06/17/2023 1 104 07/22/2023 1
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

