python - 如何过滤连续几个月的某些值?
问题描述
我有一个结构如下的数据框:
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 做到这一点?
解决方案
我试图解决你的问题。我确实为您提供了解决方案,但在效率/代码执行方面可能不是最快的。请看下面:
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()
推荐阅读
- php - How to regenerate url path dynamically in PHP?
- c++ - GCC 和 Clang 在与 __builtin_constant_p 相关的 static_assert 方面有所不同
- java - Spring Boot REST 端点忽略 Content-Type
- javascript - 按产品类从数组创建产品列表,然后保存在本地存储中
- sql - SQL Server 到 Azure 流程工作流迁移
- javascript - onchange 函数未在移动浏览器上触发
- sql - 查找每一行的日期范围。LEAD/LAG,但具有不同的类型/动作
- python - 创建 Geoviews quadmesh 时出错:没有可用的存储后端能够支持提供的数据格式
- python - Curl 的 Python 等效项给出 400 响应
- angular - 带有Angular 9的HammerJs手势