You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的全部记录。具体步骤如下:

  1. 转换日期格式:将Date列转为datetime类型,确保日期比较的有效性
  2. 识别需排除的ID:筛选出满足Date < '2023-05-01'且Flagged=1的记录,提取对应的唯一ID集合
  3. 过滤数据集:保留不在排除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 16:15:35