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

DataFrame按日期排序并在日期分组内指定status分类排序的实现

解决方案

要实现先按日期排序,每个日期分组内status为B的条目排在S之前,且保留所有日期的所有记录,可以通过以下两种方式实现:

方法一:利用字符自然排序

由于字母B的ASCII码小于S,直接通过sort_values指定两级排序键即可,先按date升序,再按status升序:

tempDF_sorted = tempDF.sort_values(by=['date', 'status'], ascending=[True, True])

方法二:自定义排序优先级(更严谨)

如果后续可能新增其他status值,或者需要明确指定排序规则,可以通过映射生成排序辅助列,确保B始终排在S前面:

# 给status分配排序权重,B权重为0,S权重为1
tempDF['status_priority'] = tempDF['status'].replace({'B': 0, 'S': 1})
# 按日期和权重排序,最后删除辅助列
tempDF_sorted = tempDF.sort_values(by=['date', 'status_priority']).drop('status_priority', axis=1)

原代码问题分析

你之前的代码tempDF.sort_values(['status']).groupby(tempDF['date']).head(2)存在两个问题:

  1. 先全局按status排序,导致所有B条目集中在前,破坏了日期的分组逻辑
  2. 使用head(2)会限制每个日期组最多保留2条记录,不符合你"保留仅含单一条目的日期记录"的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:49:58