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

Python 3按姓名、编码筛选最新时间的唯一记录问题

嘿,作为Python新手碰到这种数据分组筛选的问题太正常啦!我给你准备了两种实用的解决方案,一种是纯Python基础实现,不用装额外库;另一种用pandas,处理起来更简洁高效~

解决方案1:纯Python基础实现(无需第三方库)

这个方法只用到Python标准库,适合数据量不大的场景,思路是用字典来跟踪每组(姓名+编码)的最新记录:

  1. 遍历所有记录,把时间字符串转换成datetime对象(方便比较时间先后)
  2. 用(姓名, 编码)作为字典的键,存储该组当前最新的记录
  3. 每遇到一条记录,就和字典中对应组的记录比较时间,更新为最新的那条
from datetime import datetime

# 你的输入数据
data = [
    ('Rodriguez, Cesar', '000500', '2018-05-15 8:09:12'),
    ('Rodriguez, Cesar', '000500', '2018-05-15 12:09:12'),
    ('Rodriguez, Cesar', '000500', '2018-05-15 12:09:12'),
    ('Gura, Simon', '000501', '2018-05-15 09:09:12')
]

latest_records = {}

for name, code, dt_str in data:
    # 转换时间字符串为datetime对象,方便比较
    current_dt = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
    group_key = (name, code)
    
    # 如果是该组第一条记录,或者当前记录时间更新,就替换
    if group_key not in latest_records:
        latest_records[group_key] = (name, code, dt_str)
    else:
        existing_dt = datetime.strptime(latest_records[group_key][2], '%Y-%m-%d %H:%M:%S')
        if current_dt > existing_dt:
            latest_records[group_key] = (name, code, dt_str)

# 输出结果,转成列表格式
result = list(latest_records.values())
for item in result:
    print(item)

运行后就能得到你想要的结果:

('Rodriguez, Cesar', '000500', '2018-05-15 12:09:12')
('Gura, Simon', '000501', '2018-05-15 09:09:12')

解决方案2:用Pandas快速处理(适合大数据量)

如果你的数据量比较大,或者后续还有更多数据处理需求,用pandas库会更高效简洁,几行代码就能搞定:

import pandas as pd

# 你的输入数据
data = [
    ('Rodriguez, Cesar', '000500', '2018-05-15 8:09:12'),
    ('Rodriguez, Cesar', '000500', '2018-05-15 12:09:12'),
    ('Rodriguez, Cesar', '000500', '2018-05-15 12:09:12'),
    ('Gura, Simon', '000501', '2018-05-15 09:09:12')
]

# 转换为DataFrame格式
df = pd.DataFrame(data, columns=['Name', 'Code', 'Datetime'])
# 将时间列转为datetime类型
df['Datetime'] = pd.to_datetime(df['Datetime'])
# 按姓名和编码分组,取每组时间最新的记录
latest_df = df.groupby(['Name', 'Code'], as_index=False).max()

# 转换为元组列表并输出
result = [tuple(row) for row in latest_df.values]
for item in result:
    print(item)

这个方法的优势在于pandas内部做了优化,处理大量数据时比纯循环快很多,而且代码可读性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:12:30