如何在Python中筛选DataFrame的yearweek列前4个最大值对应数据?
解决方法
你的问题出在nlargest的逻辑上:它是按行选取yearweek最大的前N条记录,当大量行的yearweek等于最大值时,keep='all'会返回所有最大值的行,而非前4个不同yearweek的全部数据。要实现需求,需要先提取最大的4个不同yearweek值,再筛选这些周对应的所有行,具体步骤如下:
步骤1:获取最大的4个唯一yearweek值
可以通过以下几种方式实现:
方法一:排序去重后取前4
# 提取所有唯一的yearweek,降序排序后取前4个 top4_weeks = sorted(df['yearweek'].unique(), reverse=True)[:4]
方法二:用numpy简化排序
import numpy as np # 升序排序后取最后4个(即最大的4个) top4_weeks = np.sort(df['yearweek'].unique())[-4:]
方法三:通过去重行筛选
# 先去重得到每个yearweek的单行数据,再取最大的4个yearweek top4_weeks = df.drop_duplicates(subset='yearweek').nlargest(4, 'yearweek')['yearweek'].tolist()
步骤2:筛选对应周的所有数据
用isin方法保留yearweek属于top4_weeks的所有行:
filtered_df = df[df['yearweek'].isin(top4_weeks)]
这样就能自动获取最近4周的全部数据,每周新增数据后重新运行代码即可,无需手动指定周数。
内容的提问来源于stack exchange,提问作者JuanGS
相关产品推荐
相关产品推荐

