Power Query按ID去重并保留对应最早日期行的实现方法
按ID去重并保留最早日期行的解决方法
问题说明
现有包含ID和日期的表格,部分ID对应多个日期(格式为日/月/年),需按ID去重,仅保留每个ID对应的最早日期行,消除ID重复。
原表格示例
| ID | 日期 |
|---|---|
| ID 1 | 1/4/2022 |
| ID 2 | 1/6/2022 |
| ID 3 | 12/20/2021 |
| ID 3 | 4/5/2022 |
| ID 3 | 24/7/2022 |
| ID 4 | 3/1/2022 |
| ID 4 | 3/5/2022 |
| ID 5 | 15/8/2022 |
目标表格示例
| ID | 日期 |
|---|---|
| ID 1 | 1/4/2022 |
| ID 2 | 1/6/2022 |
| ID 3 | 12/20/2021 |
| ID 4 | 3/1/2022 |
| ID 5 | 15/8/2022 |
方法1:Excel手动操作
- 标准化日期格式:选中日期列,点击「数据」→「分列」,按分隔符
/拆分,将列数据格式设置为「日期」,确保Excel能识别日期值。 - 排序:选中整个数据区域,点击「数据」→「排序」,设置主要关键字为
ID(升序)、次要关键字为日期(升序),让每个ID的最早日期排在最上方。 - 删除重复项:选中ID列,点击「数据」→「删除重复项」,仅勾选
ID列,确认后自动保留每个ID的第一行(即最早日期行)。
方法2:Python(Pandas)批量处理
用Pandas库可快速完成数据清洗:
import pandas as pd # 读取数据(替换为你的数据源路径或直接传入DataFrame) df = pd.read_csv("data.csv") # 将日期列转为datetime类型,指定格式为日/月/年 df["日期"] = pd.to_datetime(df["日期"], format="%d/%m/%Y") # 按ID分组,保留每组日期最小的行 result_df = df.groupby("ID", as_index=False).agg({"日期": "min"}) # 转回原日期格式(可选) result_df["日期"] = result_df["日期"].dt.strftime("%d/%m/%Y") # 输出或保存结果 print(result_df) result_df.to_csv("result.csv", index=False)
方法3:SQL数据库查询
如果数据存在数据库中,直接用分组查询获取结果:
-- MySQL示例 SELECT ID, DATE_FORMAT(MIN(STR_TO_DATE(日期, '%d/%m/%Y')), '%d/%m/%Y') AS 日期 FROM your_table GROUP BY ID;
注:不同数据库日期转换函数不同:
- SQL Server用
CONVERT(datetime, 日期, 103) - Oracle用
TO_DATE(日期, 'DD/MM/YYYY')
根据实际数据库调整即可。
内容的提问来源于stack exchange,提问作者Neeko
相关产品推荐
相关产品推荐

