使用Pandas按多列分组,获取唯一name对应最新日期的行
解决Pandas中按name保留最新日期完整行的问题
你当前的代码按['ID', 'month']分组取最新日期行,这和需求的每个唯一name保留最新日期行不匹配,导致同一个name被分到不同分组中重复保留,所以出现重复行。
步骤1:确保日期列是datetime类型
如果你的date列是字符串格式,先转为datetime类型,避免字符串比较导致的错误:
import pandas as pd df['date'] = pd.to_datetime(df['date'])
方法一:使用groupby+idxmax
通过name分组,获取每个组内日期最大的行索引,再提取对应行:
# 获取每个name对应最新日期的行索引 latest_idx = df.groupby('name')['date'].idxmax() # 提取结果并重置索引 result_df = df.loc[latest_idx].reset_index(drop=True)
方法二:排序后去重
先按name升序、date降序排序,再保留每个name的第一行:
# 排序:name分组内按日期从新到旧排列 sorted_df = df.sort_values(by=['name', 'date'], ascending=[True, False]) # 保留每个name的第一行(最新日期行)并重置索引 result_df = sorted_df.groupby('name').head(1).reset_index(drop=True)
说明
- 两种方法都能保证每个
name仅保留一行,且是该name对应的最新日期的完整行,允许ID重复。 - 如果同一个
name存在多行日期相同的情况,两种方法都会保留最早出现的那一行(若要自定义保留规则,可在排序时添加额外列)。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

