如何对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
相关产品推荐
相关产品推荐

