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

如何基于列条件提取行,获取每个唯一loanId对应最新ListingEventDate的全量数据

按唯一贷款号提取最新日期全量字段的Pandas解决方案

你之前的代码存在两处逻辑问题:

  1. df.groupby(['LoanNumber'])['listingEventDate'].transform('max')仅生成了每个贷款号对应最大日期的序列,没有用该结果筛选原数据行,无法得到目标结果
  2. 第二段代码的isin逻辑错误:group.index本身就是所有去重后的贷款号,df['LoanNumber'].isin(group.index)相当于没有做过滤,完全没有按最大日期筛选的逻辑

前置准备

首先需要确保listingEventDate列为日期类型,避免字符串按字典序比对出错:

import pandas as pd
# 转换为日期类型,format参数可根据你实际的日期格式调整
df['listingEventDate'] = pd.to_datetime(df['listingEventDate'])

可行解决方案

  • 方案1:排序后去重(最常用,性能优秀)
# 按日期升序排序后,按贷款号去重,保留最后一行(即日期最新的行)
result = df.sort_values('listingEventDate').drop_duplicates('LoanNumber', keep='last')
  • 方案2:基于transform做布尔索引(和你最初的写法逻辑最接近)
# 生成最大日期匹配掩码,筛选所有符合条件的行
max_date_mask = df.groupby('LoanNumber')['listingEventDate'].transform('max') == df['listingEventDate']
result = df[max_date_mask]

如果同一个贷款号存在多条完全相同的最大日期行,该方案会全部保留,仅需要保留一条的话可追加drop_duplicates('LoanNumber')处理。

  • 方案3:基于idxmax取索引(适合日期列无空值的场景)
# 取每个分组最大日期对应的行索引,直接提取对应行
max_date_idx = df.groupby('LoanNumber')['listingEventDate'].idxmax()
result = df.loc[max_date_idx]

原始数据集示例

数据集示例截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:54:02