python - 对数据执行操作并将列添加到 groupby 结果
问题描述
我正在尝试编写一个简单的程序来跟踪我本学期参加两门大学课程的情况。我需要每个科目的每个班级至少有 80% 的出勤率。每个科目有三个班级(T、TP 和 P)。
经过一段时间的修补,我找到了 groupby pandas 功能:
import pandas as pd
import sys
df = pd.read_csv(sys.argv[1])
g = df.groupby(['Subject','Class']).count()
print(g)
每个类的源文件都有一行,当我去的时候我会记下“Presente”。当由于某些外部原因没有上课时,我也会注意“Sin Clases”。这是源文件的前 5 行的样子:
Date Day Subject Class Attendance Comments
0 6/8/2018 2 Medieval T Presente NaN
1 6/8/2018 2 Logica T Presente NaN
2 6/8/2018 2 Logica P NaN NaN
3 8/8/2018 4 Logica TP Sin clases Movilización IVE
4 8/8/2018 4 Logica P NaN Movilización IVE
这是当前的输出。我无法弄清楚如何执行某种操作并添加一列。例如,为每个子组添加一列,仅计算值为“Presente”的那些行。我发现自己把事情复杂化了,我害怕我错过了一些东西。
z:\devs\py\asist>python asistb.py asist2q.csv
Date Day Attendance Comments
Subject Class
Logica P 32 32 3 4
T 16 16 4 3
TP 16 16 1 1
Medieval P 16 16 0 0
T 32 32 5 4
TP 16 16 1 1
非常感谢有关如何解决问题的提示或提示。非常感谢!
解决方案
好像你需要unstack
+stack
df.groupby(['Subject','Class']).count().unstack(fill_value=0).stack()
Out[296]:
Date Day Attendance Comments
Subject Class
Logica P 2 2 0 1
T 1 1 1 0
TP 1 1 1 1
Medieval P 0 0 0 0
T 1 1 1 0
TP 0 0 0 0
推荐阅读
- php - 对 Laravel 的架构感到困惑
- python - Python - 如何根据索引将数组的一些元素放入其他数组
- reactjs - TypeScript NextPage 函数 getInitialProp 静态方法与 @typescript-eslint/unbound-method
- c# - 将 Selenium 图像读入字节数组并作为内联图像附件发送到电子邮件
- java - 使用spring maven插件构建时如何包含空目录?
- python - 无法在 MacOS 上使用 pyenv Python 安装 tkinter
- javascript - 如何使用 d3.js 按单个单词分隔和包装 SVG 文本元素?
- java - 扫描仪在尝试获取下一个时抛出空指针
- python - 使用 MapType 文字创建新列
- tensorflow2.0 - .prefetch() 和 .cache() 没有加速 tf.data.Dataset 管道