如何基于列条件提取行,获取每个唯一loanId对应最新ListingEventDate的全量数据
按唯一贷款号提取最新日期全量字段的Pandas解决方案
你之前的代码存在两处逻辑问题:
df.groupby(['LoanNumber'])['listingEventDate'].transform('max')仅生成了每个贷款号对应最大日期的序列,没有用该结果筛选原数据行,无法得到目标结果- 第二段代码的
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
相关产品推荐
相关产品推荐

