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

Python Pandas:如何在重复数据中按规则选择指定记录

解决方案

步骤说明

  1. 保留含NaN的记录:原代码的dropna会丢失仅含NaN Plan的用户(比如JQ),因此不提前删除NaN,后续处理时优先保留有效Plan,无有效Plan则保留NaN。
  2. 设置Plan优先级:给College赋予更高优先级,确保同一日期下College排在其他Plan之前。
  3. 多维度排序去重:先按日期从新到旧排序,再按Plan优先级从高到低排序,最后保留每个用户的第一条记录,即为最新日期下的最优Plan。

修改后代码

# 定义Plan优先级:College > Work > NaN
plan_priority = {'College': 2, 'Work': 1, float('nan'): 0}

# 按日期降序、Plan优先级降序排序
df_sorted = df.sort_values(
    by=['Date', df['Plan'].map(plan_priority)],
    ascending=[False, False]
)

# 保留每个Name的第一条最优记录
result = df_sorted.drop_duplicates('Name', keep='first')

# 可选:按Name排序整理结果
result = result.sort_values('Name').reset_index(drop=True)

代码解释

  • plan_priority字典定义权重,让College在同一日期的排序中优先于Work,NaN权重最低。
  • sort_values实现双维度排序:先确保最新日期的记录排在前面,再在同日期内让高优先级Plan靠前。
  • drop_duplicates('Name', keep='first')直接锁定每个用户的最优记录,同时保留了仅含NaN的用户条目。

验证结果

运行后输出与需求完全一致:

DateNamePlan
2022JohnCollege
2021KelCollege
2022JamesWork
2019DaronCollege
2019JQNaN
2021MelWork
2018ShamaWork

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:48:10