Python 通过/失败数据帧示例

Python 通过/失败数据帧示例,python,pandas,dataframe,crosstab,Python,Pandas,Dataframe,Crosstab,我有以下代码: import pandas as pd status = ['Pass','Fail'] item_info = pd.DataFrame({ 'student': ['John','Alice','Pete','Mike','John','Alice','Joseph'], 'test': ['Pass','Pass','Pass','Pass','Pass','Pass','Pass'] })

我有以下代码:

  import pandas as pd
    
    status = ['Pass','Fail']
    item_info = pd.DataFrame({
        'student': ['John','Alice','Pete','Mike','John','Alice','Joseph'],
        'test': ['Pass','Pass','Pass','Pass','Pass','Pass','Pass']
    })
    
    item_status = pd.crosstab(item_info['student'],item_info['test'])
    print(item_status)
产生:

| Student | Pass |
|---------|------|
| Alice   | 2    |
| John    | 2    |
| Joseph  | 1    |
| Mike    | 1    |
| Pete    | 1    |
但是,我想创建如下内容:

| Student | Pass | Fail | Total |
|---------|------|------|-------|
| Alice   | 2    | 0    | 2     |
| John    | 2    | 0    | 2     |
| Joseph  | 1    | 0    | 1     |
| Mike    | 1    | 0    | 1     |
| Pete    | 1    | 0    | 1     |

如何更改代码,使其包含一个所有学生都为0的失败列,并提供一个总数?

通用解决方案,它使用
reindex添加一个额外的标签,而不事先知道现有的标签

cols = item_info['test'].unique().tolist()+['Fail'] #adding the extra label
pd.crosstab(item_info['student'],item_info['test']).reindex(columns=cols,fill_value=0)
或者,根据您的需要,我假设您正在寻找链方法:

item_status = pd.crosstab(item_info['student'],item_info['test'])
item_status['Fail'] = 0


“谢谢你,很好用。”丹尼尔邓宁很乐意帮忙。快乐编码@DanielMDunning欢迎来到Stackoverflow!如果这回答了你的问题,你可以回答。
test     Pass  Fail
student            
Alice       2     0
John        2     0
Joseph      1     0
Mike        1     0
Pete        1     0