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

如何获取各id对应的最新date1及其全部关联行?

获取Pandas DataFrame中每个id对应最新date1的所有条目

原始DataFrame

import pandas as pd
from io import StringIO

df = pd.read_csv(StringIO("""
id    date1         date2
101  2021-10-01    2021-09-01
101  2021-11-01    2021-10-01
101  2021-11-01    2021-12-01
102  2022-09-01    2022-09-01
102  2022-11-01    2023-01-01
103  2021-10-01    2021-11-01
103  2021-10-01    2021-11-01
103  2021-12-01    2021-11-01
103  2021-12-01    2021-12-01
103  2021-12-01    2022-01-01"""), sep="\s+", parse_dates=["date1", "date2"])

需求

提取每个id对应的最新(最大)date1的所有条目,预期结果:

id    date1         date2
101  2021-11-01    2021-10-01
101  2021-11-01    2021-12-01
102  2022-11-01    2023-01-01
103  2021-12-01    2021-11-01
103  2021-12-01    2021-12-01
103  2021-12-01    2022-01-01

解决方案

方法1:使用transform生成匹配掩码

通过groupby结合transform,为每一行生成对应id的最大date1,再用布尔索引筛选:

# 生成每个id对应的最大date1,广播到原DataFrame的每一行
max_date_per_id = df.groupby('id')['date1'].transform('max')
# 筛选date1等于对应id最大date1的行
result = df[df['date1'] == max_date_per_id]
# 可选:按id排序结果,和预期格式一致
result = result.sort_values('id').reset_index(drop=True)
print(result)

transform会保留原DataFrame的行数,将每个组的最大值填充到该组的所有行,精准筛选出所有符合条件的条目。

方法2:使用groupby.filter

利用filter函数对每个分组进行条件判断,保留满足date1等于组内最大值的整个分组行:

# 先按id和date1排序(可选,仅为结果顺序和预期一致)
df_sorted = df.sort_values(['id', 'date1'])
# 筛选每个组中date1等于组内最大值的行
result = df_sorted.groupby('id').filter(lambda group: group['date1'] == group['date1'].max())
print(result)

filter会返回所有符合条件的分组的原始行,适合需要保留分组内所有匹配行的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:42:50