按组筛选Pandas DataFrame:仅保留每组最早日期的记录
保留每组最早日期的所有记录
针对大型数据集,要保留每个分组(按names)中对应最早日期的全部记录,用Pandas可以高效实现:
核心思路
- 按
names分组,计算每组的最小日期 - 将每组的最小日期映射到原数据的每一行,筛选出日期等于对应组最小日期的记录
实现代码
# 先确保日期列是datetime类型(示例中已处理,大型数据集建议先做此转换) # df['dates'] = pd.to_datetime(df['dates']) # 为每条数据标记其所在组的最早日期 group_min_date = dfex.groupby('names')['dates'].transform('min') # 筛选符合条件的记录 filtered_df = dfex[dfex['dates'] == group_min_date] # 查看结果 print(filtered_df)
代码说明
groupby('names')['dates'].transform('min'):对每个names分组计算最早日期,然后将这个值广播到该组的所有行,生成和原数据长度一致的Series,方便直接对比筛选。- 这种方法是向量式操作,避免了循环遍历分组,处理大型数据集时效率远高于逐组处理的方式。
运行结果
运行后会得到符合要求的数据集:
names dates 0 jim 2019-01-01 1 jim 2019-01-01 2 jim 2019-01-01 9 bob 2019-01-05 10 bob 2019-01-05 15 sara 2019-01-02 16 sara 2019-01-02 17 sara 2019-01-02 18 sara 2019-01-02
内容的提问来源于stack exchange,提问作者John Conor
相关产品推荐
相关产品推荐

