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

按姓名分组保留日期最新的角色记录技术问询

按分组保留最新日期记录的实现方案

需求:基于Date列筛选数据,按Name字段分组,保留每组中日期最新的角色记录。
示例数据:

Name    Date        Role
John    01/08/2023  A
John    01/07/2023  B
Steve   01/06/2023  B
Steve   01/04/2023  A

需保留第1行和第3行数据

SQL 实现

使用窗口函数ROW_NUMBER()对每组数据按日期倒序排名,筛选排名第一的记录即可:

WITH ranked_data AS (
    SELECT 
        Name,
        Date,
        Role,
        ROW_NUMBER() OVER(PARTITION BY Name ORDER BY STR_TO_DATE(Date, '%d/%m/%Y') DESC) AS rn
    FROM your_table_name
)
SELECT Name, Date, Role
FROM ranked_data
WHERE rn = 1;
  • STR_TO_DATE(Date, '%d/%m/%Y'):将字符串格式的日期转换为可排序的日期类型,确保排序逻辑正确;
  • PARTITION BY Name:按姓名字段分组;
  • ORDER BY ... DESC:让每组内最新的日期排在最前面;
  • 最后筛选rn=1,得到每组日期最新的记录。

Python Pandas 实现

方法1:排序后分组取首行

先将日期列转为标准日期格式,按日期倒序排序后,分组取每组的第一条记录:

import pandas as pd

# 构造示例数据
data = pd.DataFrame({
    'Name': ['John', 'John', 'Steve', 'Steve'],
    'Date': ['01/08/2023', '01/07/2023', '01/06/2023', '01/04/2023'],
    'Role': ['A', 'B', 'B', 'A']
})

# 转换日期格式
data['Date'] = pd.to_datetime(data['Date'], format='%d/%m/%Y')

# 按日期倒序排序,分组后取每组第一条
result = data.sort_values('Date', ascending=False).groupby('Name').first().reset_index()

print(result)

方法2:利用idxmax获取最大日期索引(高效版)

直接获取每组最大日期对应的行索引,再筛选数据,适合处理大数据量:

import pandas as pd

# 构造并预处理数据(同方法1)
data = pd.DataFrame({
    'Name': ['John', 'John', 'Steve', 'Steve'],
    'Date': ['01/08/2023', '01/07/2023', '01/06/2023', '01/04/2023'],
    'Role': ['A', 'B', 'B', 'A']
})
data['Date'] = pd.to_datetime(data['Date'], format='%d/%m/%Y')

# 获取每组最大日期的行索引,筛选对应数据
max_date_indices = data.groupby('Name')['Date'].idxmax()
result = data.loc[max_date_indices]

print(result)

内容的提问来源于stack exchange,提问作者ad282189323213

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:22:24