按批次去除连续批次中重复日期记录的实现方法问询
批次重复日期记录移除方案
先看你的样本数据:
x_TimeGenerated batch_number 22/03/2023 BATCH_1 21/03/2023 BATCH_1 20/03/2023 BATCH_1 19/03/2023 BATCH_1 18/03/2023 BATCH_1 18/03/2023 BATCH_2 17/03/2023 BATCH_2 16/03/2023 BATCH_2 15/03/2023 BATCH_2 14/03/2023 BATCH_2 14/03/2023 BATCH_3 13/03/2023 BATCH_3 12/03/2023 BATCH_3 11/03/2023 BATCH_3 10/03/2023 BATCH_3
需求明确:每个日期只保留最早出现批次中的所有记录,后续批次里的相同日期记录全部删除。下面给两种常用实现方案:
方案一:Python Pandas处理
如果用Python做数据清洗,直接按以下步骤执行:
- 加载数据并转换日期格式(避免字符串排序出错)
- 找出每个日期对应的最早批次
- 筛选出仅保留最早批次的记录
代码示例:
import pandas as pd # 加载数据(这里模拟数据,实际可从CSV/Excel读取) df = pd.DataFrame({ 'x_TimeGenerated': ['22/03/2023', '21/03/2023', '20/03/2023', '19/03/2023', '18/03/2023', '18/03/2023', '17/03/2023', '16/03/2023', '15/03/2023', '14/03/2023', '14/03/2023', '13/03/2023', '12/03/2023', '11/03/2023', '10/03/2023'], 'batch_number': ['BATCH_1', 'BATCH_1', 'BATCH_1', 'BATCH_1', 'BATCH_1', 'BATCH_2', 'BATCH_2', 'BATCH_2', 'BATCH_2', 'BATCH_2', 'BATCH_3', 'BATCH_3', 'BATCH_3', 'BATCH_3', 'BATCH_3'] }) # 转换日期列格式,确保后续逻辑准确 df['x_TimeGenerated'] = pd.to_datetime(df['x_TimeGenerated'], format='%d/%m/%Y') # 按日期分组,获取每个日期最早出现的批次 earliest_batch = df.groupby('x_TimeGenerated')['batch_number'].min().reset_index() earliest_batch.columns = ['x_TimeGenerated', 'earliest_batch'] # 合并筛选,保留仅属于最早批次的记录 cleaned_df = df.merge(earliest_batch, on='x_TimeGenerated') cleaned_df = cleaned_df[cleaned_df['batch_number'] == cleaned_df['earliest_batch']].drop(columns='earliest_batch') # 查看处理后的数据 print(cleaned_df)
运行后,BATCH_2的18/03/2023、BATCH_3的14/03/2023记录会被全部移除,剩下的就是每个日期仅保留最早批次的完整数据。
方案二:SQL处理
如果数据存储在数据库中,用窗口函数可以快速实现:
假设你的表名为batch_data,字段为x_TimeGenerated(日期类型)和batch_number(字符串类型),执行以下SQL语句:
SELECT x_TimeGenerated, batch_number FROM ( SELECT x_TimeGenerated, batch_number, -- 按日期分组,给批次排序,最早的批次标记为1 ROW_NUMBER() OVER ( PARTITION BY x_TimeGenerated ORDER BY CAST(SUBSTRING(batch_number, 7) AS INT) ASC ) AS rn FROM batch_data ) AS t WHERE rn = 1;
这里用SUBSTRING(batch_number,7)提取批次后的数字(比如从BATCH_1提取1),转成整数排序,避免出现BATCH_10排在BATCH_2前面的错误逻辑。执行后只会保留每个日期最早批次的所有记录。
内容的提问来源于stack exchange,提问作者Lopa
相关产品推荐
相关产品推荐

