Pandas按id列分组取最早日期对应行时如何保留所有同日期的记录
代码修改方案
首先需要确保日期列是datetime类型,否则字符串格式的日期比较可能出现逻辑错误,完整修改后的代码如下:
# 转换日期列为标准datetime类型,指定格式避免解析错误 df['date'] = pd.to_datetime(df['date'], format='%m/%d/%Y') # 按id分组后,广播每个分组的最小日期,筛选所有日期等于最小日期的行 df_ear = df[df['date'] == df.groupby('id')['date'].transform('min')] # 统计location出现频次,取排名前3的结果 top3_locations = df_ear['location'].value_counts().head(3)
原理解释
和之前用idxmin()的逻辑不同,groupby('id')['date'].transform('min')会给原DataFrame的每一行返回它所属id分组的最小日期,直接做等值筛选就能保留同一个id下所有日期为最小值的记录,不会漏记同一分组下多个相同最早日期的行。
内容的提问来源于stack exchange,提问作者CodingStark
相关产品推荐
相关产品推荐

