首页 > 解决方案 > 对数据执行操作并将列添加到 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

非常感谢有关如何解决问题的提示或提示。非常感谢!

标签: pythonpandaspandas-groupby

解决方案


好像你需要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

推荐阅读