首页 > 解决方案 > 如何过滤连续几个月的某些值?

问题描述

我有一个结构如下的数据框:

Name    Month Grade

Sue     Jan   D

Sue     Feb   D

Jason   Mar   B

Sue     Mar   D

Jason   Jan   B

Sue     Apr   A

Jason   Feb   C

我想获取过去 6 个月内连续 3 个月获得 D 的学生名单。在上面的示例中,Sue 将在名单上,因为她在 1 月、2 月和 3 月获得 D。如何使用 Python、Pandas 或 Numpy 做到这一点?

标签: pythonpandasnumpy

解决方案


我试图解决你的问题。我确实为您提供了解决方案,但在效率/代码执行方面可能不是最快的。请看下面:

newdf = df.pivot(index='Name', columns='Month', values='Grade')
newdf = newdf[['Jan', 'Feb', 'Mar', 'Apr']].fillna(-1)
newdf['concatenated'] = newdf['Jan'].astype('str') + newdf['Feb'].astype('str') + newdf['Mar'].astype('str') + newdf['Apr'].astype('str')
newdf[newdf['concatenated'].str.contains('DDD', regex=False, na=False)]

输出将如下所示:

Month Jan Feb Mar Apr concatenated
Name                              
Sue     D   D   D   A         DDDA

如果您只想要名称,请改用以下命令。

newdf[newdf['concatenated'].str.contains('DDD', regex=False, na=False)].index.to_list()

推荐阅读