我所拥有的是一个名为“报告”的数据集,其中包含交付驱动程序的详细信息。 “通过”表示他们准时交货,“失败”表示他们没有准时交货
Name|Outcome
A |Pass
B |Fail
C |Pass
D |Pass
A |Fail
C |Pass
我想要的是
Name|Pass|Fail|Total
A |1 |1 |2
B |0 |1 |1
C |2 |0 |2
D |1 |0 |1
我试过了:
report.groupby(['Name','outcome']).agg(['count'])
但它没有给我所需的输出
非常感谢
最佳答案
将crosstab
与margins=True
和margins_name
参数一起使用:
print (pd.crosstab(df['Name'], df['Outcome'], margins=True, margins_name='Total'))
Outcome Fail Pass Total
Name
A 1 1 2
B 1 0 1
C 0 2 2
D 0 1 1
Total 2 4 6
然后用
DataFrame.iloc
删除最后一行的位置:df = pd.crosstab(df['Name'], df['Outcome'], margins=True, margins_name='Total').iloc[:-1]
print (df)
Outcome Fail Pass Total
Name
A 1 1 2
B 1 0 1
C 0 2 2
D 0 1 1
关于python - 在 Pandas 中混合聚集和分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58932190/