这一点很明显,但我找不到一个简单的解决方案。
我有像这样的pandas DataFrame:
actual | predicted
------ + ---------
Apple | Apple
Apple | Apple
Apple | Banana
Banana | Orange
Orange | Apple
我想要这个:
| Apple | Banana | Orange
------ + ------- + ------- + -------
Apple | 2 | 1 | 0
Banana | 0 | 0 | 1
Orange | 1 | 0 | 0
答案 0 :(得分:11)
您可以使用groupby
汇总size
和unstack
MultiIndex
:
df = df.groupby(['actual','predicted']).size().unstack(fill_value=0)
print (df)
predicted Apple Banana Orange
actual
Apple 2 1 0
Banana 0 0 1
Orange 1 0 0
crosstab
的另一个解决方案:
df = pd.crosstab(df.actual, df.predicted)
print (df)
predicted Apple Banana Orange
actual
Apple 2 1 0
Banana 0 0 1
Orange 1 0 0
答案 1 :(得分:2)
您可以使用pandas.pivot_table
>>> df.pivot_table(index='actual', columns='predicted', aggfunc=len).fillna(0).astype('int')
predicted Apple Banana Orange
actual
Apple 2 1 0
Banana 0 0 1
Orange 1 0 0
答案 2 :(得分:2)
在黑暗中拍摄,但我认为你正在寻找一个confusion matrix
from sklearn.metrics import confusion_matrix
print confusion_matrix(df['actual'], df['predicted'])