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

如何对DataFrame过滤:每个yearweek仅保留一行数据

嘿,这个需求我经常碰到,给你分享几个靠谱的解决办法,根据你的实际场景选就行~

方法1:用drop_duplicates快速去重

这是最直接省心的方式,专门用来处理重复行的场景。你只需要指定按yearweek列去重,默认会保留每组yearweek第一次出现的行:

df_filtered = df.drop_duplicates(subset='yearweek', keep='first')

要是你想保留每组最后一次出现的行,把keep参数改成'last'就可以:

df_filtered = df.drop_duplicates(subset='yearweek', keep='last')

小提醒:如果设keep=False会删除所有重复的yearweek行(连唯一的那组都不留),这个应该不是你要的效果,就不用管它啦。

方法2:用groupby实现自定义选择

如果你需要更灵活的控制(比如想保留每个yearweek里日期最新的行,或者某列数值最大的行),groupby会更适合你:

举个例子,假设你的DataFrame还有date列,要保留每个yearweek对应的最新日期行:

# 按yearweek分组,找到每组中date最大的行的索引,再提取这些行
df_filtered = df.loc[df.groupby('yearweek')['date'].idxmax()]

如果只是想简单取每组的第一行,也可以这么写:

df_filtered = df.groupby('yearweek').first().reset_index()

这里的reset_index()是把yearweek从分组索引变回普通列,要是你不需要的话可以去掉。

额外小提示

处理前最好先确认yearweek列的格式是统一的(比如都是字符串或整数),避免因为类型不一致导致重复没被识别。可以统一转成字符串类型:

df['yearweek'] = df['yearweek'].astype(str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:56:40