循环分组依据、聚合并根据组创建新列

2024-02-27

我正在尝试获取学生专栏,根据他们的进度水平来统计活动。

Data looks like enter image description here


STUDENT_ID STUDENT_ACTIVITY_SESSION_ID NODE_NAME   ACTIVITY_NAME   prog_level
FredID  gobbledeegook1  Node1   MyActivity1 pass
FredID  gobbledeegook2  Node1   MyActivity1 pass
FredID  gobbledeegook3  Node2   MyActivity2 pass
JaniceID    gobbledeegook4  Node3   MyActivity3 stay
JaniceID    gobbledeegook5  Node3   MyActivity3 stay
JaniceID    gobbledeegook5  Node3   MyActivity3 fail
  

Here is what I want: enter image description here


STUDENT_ID attempts_pass   attempts_fail   attempts_stay
FredID  3       
JaniceID        1   2
  
  1. 我尝试循环遍历,以便变量名称是自动的。我希望每一行都是一个 STUDENT_ID,计数是一列
def std_attempts_by_prog_level(df):
    dict_fields = {}
    df_by_prog_level = df.groupby('prog_level')['STUDENT_ACTIVITY_SESSION_ID']
    for name, group in df_by_prog_level:
        x = group.count() 
        dict_fields["attempts_" + name] = x

    return pd.Series(dict_fields)     
  
df.groupby('STUDENT_ID').apply(std_attempts_by_prog_level).reset_index()

result:


STUDENT_ID level_1 0
0   Fred    attempts_cancel 104
1   Fred    attempts_fail   96
2   Fred    attempts_in_progress    30
  

...所以这需要进行旋转和混乱,所以我尝试从旋转方法中获取它

  1. 枢轴方法并手动命名字段:生成的多索引不会让我轻松地与其他学生指标合并回来
df_temp=df.groupby(['STUDENT_ID', 'prog_level'],as_index=False)['STUDENT_ACTIVITY_SESSION_ID'].count().pivot(index='STUDENT_ID', columns='prog_level').rename({'cancel':'attempts_cancel', 'fail':'attempts_fail', 'in_progress':'attempts_in_progress', 'pass':'attempts_pass'}, axis=1)

print(df_temp.columns)

result:

MultiIndex([('STUDENT_ACTIVITY_SESSION_ID',      'attempts_cancel'),
            ('STUDENT_ACTIVITY_SESSION_ID',        'attempts_fail'),
            ('STUDENT_ACTIVITY_SESSION_ID', 'attempts_in_progress'),
            ('STUDENT_ACTIVITY_SESSION_ID',        'attempts_pass')],
           names=[None, 'prog_level'])

你可以使用.pivot_table https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot_table.html:

result = df.pivot_table(
    index="STUDENT_ID", columns="prog_level", values="ACTIVITY_NAME",
    aggfunc="count", fill_value=0
).rename(lambda c: f"prog_level_{c}", axis=1).rename_axis(None, axis=1)

Result:

            prog_level_fail  prog_level_pass  prog_level_stay
STUDENT_ID                                                   
FredID                    0                3                0
JaniceID                  1                0                2

如果您希望索引作为列,则添加.reset_index()在管道的末端。

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

循环分组依据、聚合并根据组创建新列 的相关文章

随机推荐

  • 通过 WCF 服务传递枚举

    我需要在与我的 WCF 服务项目分开的项目中定义一个枚举 我正在创建一个包含枚举和其他数据的对象 当我通过 WCF 服务将对象传递给客户端时 我得到一个未找到的信息 Enum public enum Color Red 1 Blue Gre
  • Terraform 上出现“无效的旧提供商地址”错误

    我正在尝试使用 terraform v0 14 3 部署 bitbucket 管道以在谷歌云中创建资源 运行 terraform 命令后 管道失败并出现以下错误 Error Invalid legacy provider address T
  • 如何防止滑动触发点击?

    I use 触摸滑动 http labs rampinteractive co uk touchSwipe demos 创建可滑动的图像列表 我将滑动事件绑定到图像 同时我还绑定了一个单击事件来打开图像的大版本 我的问题是 如果我滑动 它也
  • 什么是换行转换?

    当您尝试将值从一种类型转换为另一种不兼容的类型时 您会在 C 中收到以下错误 CS0039 无法通过引用转换 装箱转换 拆箱转换 包装转换或 null 类型转换将类型 A 转换为 B 我了解如何潜在地解决此问题 但我的问题是关于转换本身的类
  • Rails 迁移使列为 null => true

    我最初创建了一个表 其中列为 t string email default gt null gt false 要求已更改 现在我需要允许电子邮件为空 如何编写迁移以使 null gt true change column null http
  • 根据向量更改列的类别

    我有 2 个数据框 主要的一个df 另一个数据框tmp它描述了列类型df和新格式应转换哪些列 这是一个可重现的示例 df lt data frame var1 c a b c var2 c 1 2 3 var3 c d e f tmp lt
  • Clojure 的惰性如何与 Java/不纯代码的调用交互?

    今天我们在代码中偶然发现了一个问题 无法回答这个 Clojure 问题 Clojure 是严格还是惰性地评估不纯代码 或对 Java 代码的调用 似乎副作用 惰性序列会导致奇怪的行为 以下是我们所知道的导致这个问题的信息 Clojure 有
  • formfield_for_foreignkey 和内联管理

    我只想展示特定比赛中与球队相关的球员 通常 当我这样做时 它会向我显示数据库中的所有球员 这是我的 models py class InningsCard models Model fixture models ForeignKey Fix
  • 构建 Django Webapp 前端的“最佳”方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 提前致谢 这更像是一个 哲学 问题 而不是直接请求对代码的意见 尽管我非常感谢任何人对代码示例的输入 从我记事起 我就一直是一名 传统 开发人员
  • 在 iOS 7 中设置 UINavigationBar 动画(如 Safari)

    在 Safari 中滚动内容时 标题栏会以动画形式显示为较小版本 实现这一点的最佳方法是什么 目前 我正在更改框架的大小 如下所示 void scrollViewDidScroll UIScrollView scrollView Table
  • 发送电子邮件需要设置哪些 php.ini 参数? [复制]

    这个问题在这里已经有答案了 我想从我的 PHP 代码发送电子邮件 但收到警告消息 那么 php ini 参数要设置哪些呢 要检查 更改您的 PHP 邮件配置 打开 php ini 文件 如果您不知道它在哪里 请参见下文 搜索显示为 邮件功能
  • Visual Studio 2010 关闭确认

    我希望VS2010在我关闭整个环境时询问我是否确定要关闭VS2010 不幸的是我在任何地方都找不到这个设置 有人知道吗 AFAIK 没有这样的选择 然而 有一个古老的工具 叫做NoClose http www donationcoder c
  • 如何在 HTML 中实现“全选”复选框?

    我有一个带有多个复选框的 HTML 页面 我还需要一个名为 全选 的复选框 当我选择此复选框时 必须选择 HTML 页面中的所有复选框 我怎样才能做到这一点
  • 从 iframe 中重定向到

    我有一个 Rails 应用程序 它有一个在 iframe 中呈现的表单 并且从我想要的创建操作中redirect to在 iframe 之外并重新渲染整个页面 而不是在 iframe 中 我很好奇有什么想法可以实现这一目标 你能行的 你必须
  • 使用 SymPy codegen 为方程组生成 Fortran 子例程

    以我发现的以前的例子为基础here https stackoverflow com questions 25327845 how to generate fortran subroutine with sympy codegen 我尝试找出
  • 如何在 WordPress 中将 HTML 表单中的数据保存到数据库表中?

    我有一个 WordPress 主题 我正在尝试将 HTML 表单中的数据保存到数据库中 我制作了 HTML 表单并添加了一个 保存并关闭 按钮 该按钮调用名为的 JavaScript 函数saveData 从表单中获取数据并将其发送到add
  • 如何删除 Apple APNS 反馈收到的设备令牌

    我成功通过 PHP 获取 Apple APNS 反馈数据 我得到的结构 经过一些处理 看起来像这样 时间戳 设备令牌 我的问题是如何知道应该从数据库中删除哪些设备令牌并停止向它们发送通知 Regardz Mladjo 时间戳是这里的关键元素
  • 如何从React中的函数参数设置状态[重复]

    这个问题在这里已经有答案了 我将名称和值从子组件传递给handleChange 函数 现在我想将状态设置为与提供的名称匹配的值 但我不知道如何设置 我尝试了这种方式 但它给出了错误 this setState 不是函数 class Pare
  • MySQL 作业启动失败

    我在 Kubuntu 12 04 上 通过 apt get 安装 mysql mysql 版本 5 5 35 后 我尝试启动 mysql 服务 但出现此错误 sudo 服务 mysql 启动 开始 作业启动失败 所以我用谷歌搜索了这个问题
  • 循环分组依据、聚合并根据组创建新列

    我正在尝试获取学生专栏 根据他们的进度水平来统计活动 Data looks like STUDENT ID STUDENT ACTIVITY SESSION ID NODE NAME ACTIVITY NAME prog level Fre