在 Pandas 中有效地嵌套查询/比较多个数据集

2024-01-06

我正在使用 Pandas(第一次)来确定人员是否满足课程出勤的先决条件。下面的代码返回所需的结果,但我确信有更好的方法来实现相同的结果。

确定您是否可以学习物理的标准如下;

(Math_A OR Math_B OR Math_C) AND (Eng_A OR Eng_B) AND NOT (Physics)

我的问题是可以应用哪些效率或替代方法来完成任务。

阅读嵌套查询等内容后,我无法想出一种方法来比较一个查询中的多个查询。理想情况下,我希望有一份声明来检查此人是否满足先决条件,但到目前为止我还没有做到这一点。

Dataset- 通常包含 > 20,000 条记录

Emplid,Name,CourseId,CourseName
123,David,P12,Mathematics A
123,David,P13,Mathematics B
123,David,P14,Mathematics C
123,David,P32,Engineering A
456,Sally,P33,Engineering B
789,Roger,P99,Physics

Code

修订以简化可读性 - 谢谢 Boud。

import pandas as pd

def physics_meets_prereqs():

    df = pd.DataFrame({'Emplid':['123','123', '123', '123', '456', '789'],
                   'Name':['David','David','David','David','Sally','Roger'],
                   'CourseId':['P12','P13','P14','P32','P33','P99'],
                   'CourseName':['Mathematics A','Mathematics B','Mathematics C','Engineering A','Engineering B', 'Physics']
                    })

    # Get datasets of individually completed courses
    has_math = df.query('CourseId == "P12" or CourseId == "P13" or CourseId == "P14"')
    has_eng = df.query('CourseId == "P32" or CourseId == "P33"')
    has_physics = df.query('CourseId == "P99"')

    # Get personnel who have completed math and engineering
    has_math_and_eng = has_math[(has_math['Emplid'].isin(has_eng['Emplid']))]

    # Remove personnel who have completed physics
    has_math_and_eng_no_physics = has_math_and_eng[~(has_math_and_eng['Emplid'].isin(has_physics['Emplid']))]

    print(has_math_and_eng_no_physics)

physics_meets_prereqs()

Output

  CourseId     CourseName Emplid   Name
0      P12  Mathematics A    123  David
1      P13  Mathematics B    123  David
2      P14  Mathematics C    123  David

输出结果表明 David 满足物理课程的先决条件。它确实列出了他 3 次,我还没有弄清楚如何限制。不过,我实现这一目标的方式绝对可以改进。

简而言之

显示已完成至少一门数学课程、至少一门工程课程且尚未完成物理课程的人员列表。


pivoted = df.groupby(['Name', df.CourseName.str.split().str[0]]) \
            .CourseId.size().gt(0).unstack(fill_value=False)

pivoted
matches = pivoted.query('Engineering & Mathematics & ~Physics')
matches
df.query('Name in @matches.index')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Pandas 中有效地嵌套查询/比较多个数据集 的相关文章

随机推荐

  • 将 EoS 发送到文件接收器,同时从 tee 中删除分支

    我写了一个v4l2src同时显示和记录的代码 我的管道看起来像 queue videosink v4l2src tee queue filesink 目前我可以一起显示 记录 还可以随意动态启动和停止记录分支 使用 ctrl c sigin
  • Linux 内核:设置通过 create_device() 创建的 /dev 文件的权限

    我正在制作一个小型 Linux 模块 它是 char 设备的驱动程序 在我的代码中 我创建了设备类 而不是设备本身 因此 dev 文件是 在我的系统中创建 问题是 dev文件只有root权限 而用户 对该文件既没有读 写也没有执行权限 我想
  • 在 Vagrant 配置期间更新 .bashrc 和环境变量

    我正在使用 Vagrant 设置一个包含 python pip virtualenv virtualenvwrapper 和一些要求的盒子 配置 shell 脚本添加了virtualenvwrapper 所需的行 http virtuale
  • 将 string[][] 与 npgsql 一起使用

    不支持吗 尝试插入命令参数设置为的数据时出现异常 var parameter IDbDataParameter cmd Parameters index var list string value parameter Value list
  • 如何在 Android API 17 之前的 Android 中检测外部显示器

    我正在使用具有受版权保护的视频的应用程序 该视频只能在 Android 设备中运行 而不能在通过 HDMI 或无线连接的外部显示器中运行 我发现了很棒的 AP I推介会 http developer android com referenc
  • 为什么变量“i”和“j”用于计数器?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我知道这似乎是一个绝对愚蠢的问题 但我很好奇 不能不问 为什么 i 和 j 成为大多数控制结构
  • 如何在Android中没有SQL数据库的情况下显示在线数据以供离线使用?

    我想要节目3fragments in my Activity并从中加载数据json in any fragments 我将网站数据显示到Recyclerview with OkHTTP v3图书馆 我想离线显示此数据 我的意思是如果用户关闭
  • 上下文切换线程等待

    我已经寻找这个问题的答案一天了 但找不到直接的答案 我正在阅读上下文切换等待队列之类的内容 确实很好地掌握了所有内容 在阅读一篇文章时 写到当发生车队情况时 将会有大量的上下文切换 那么让我直接说一下 假设一个线程处于等待互斥体解锁的队列中
  • 类型错误:引导日期选择器中未定义日期

    我正在使用引导日期选择器http www eyecon ro bootstrap datepicker http www eyecon ro bootstrap datepicker 但 firebug 显示 bootstrap datep
  • 在 SQLPLUS 中正确格式化表

    在这被投票为重复问题之前 我在 S O 上花了相当多的时间 试图解决这个问题 正如您在下面的屏幕截图中看到的 我的表格看起来很乱 对于第一个和第二个表 您可以看到每个表有 2 组列标题 那么 例如 我怎样才能将所有 5 条客户记录包含在一张
  • 如何将任何 mp3 文件转换为 .wav 16khz 单声道 16 位

    请帮助选择将任何 mp3 文件转换为特殊 wav 的解决方案 我是 Linux 命令行工具的新手 所以现在对我来说很难 我需要从任何 mp3 文件中获取具有 16khz 单声道 16 位声音属性的 wav 我正在尝试 ffmpeg i 11
  • 将转换后的 DataFrame 保存/导出回 JDBC / MySQL

    我正在尝试弄清楚如何使用新的DataFrameWriter将数据写回 JDBC 数据库 我似乎找不到任何相关文档 尽管查看源代码似乎应该是可能的 我正在尝试的一个简单示例如下所示 sqlContext read format jdbc op
  • 引用 dplyr across() 内的列名称

    是否可以参考专栏names在 lambda 函数里面across df lt tibble age c 12 45 sex c f f allowed values lt list age 18 100 sex c f m df gt mu
  • 在C中获取文件大小的正确方法

    我正在做一个套接字编程作业 其中我必须在 sparc 和 Linux 机器之间发送一个文件 在以字符流发送文件之前 我必须获取文件大小并告诉客户端 以下是我尝试获取尺寸的一些方法 但我不确定哪一种是合适的 出于测试目的 我创建了一个内容为
  • Glassfish 上的领域身份验证后重定向

    我目前正在 Glassfish 上运行 JPA EJB JSF 应用程序 并使用安全 JDBC 领域进行身份验证 该领域运行得很好 满足了要求 直到客户要求对导航进行小的更改 如今 如果您尝试访问受保护的页面 身份验证机制会将您重定向到 w
  • 从视频中提取音频为 wav

    我知道有一个与我类似的问题 从视频文件中提取 wav 文件 https stackoverflow com questions 1010937 extract wav file from video file 我是 C 新手 了解 COM
  • array.reduce() 方法中此语法的含义是什么?

    我正在研究一个功能性的 JavaScript 库 并发现了一个单行函数 它取数组中数字的平均值 我对语法中包含的某些内容感到困惑 但似乎不需要正确返回结果 const numArr 1 2 3 4 5 6 7 8 9 10 const av
  • 如何获取具有给定属性的所有 Unicode 字符的列表?

    如果不循环整个 Unicode 字符范围 如何获取具有给定属性的字符列表 特别是我想要一个所有数字字符的列表 即那些匹配 d 我看过Unicode UCD http perldoc perl org Unicode UCD html 它对于
  • 如何使用vue js滚动结束页面

    如何滚动到页面底部 scroll let container this el querySelector scrollingChat container scrollTop container scrollHeight 我正在这样做 并且总
  • 在 Pandas 中有效地嵌套查询/比较多个数据集

    我正在使用 Pandas 第一次 来确定人员是否满足课程出勤的先决条件 下面的代码返回所需的结果 但我确信有更好的方法来实现相同的结果 确定您是否可以学习物理的标准如下 Math A OR Math B OR Math C AND Eng