2016-11-28 37 views
5

Bu açık olmalı, ancak kolay bir çözüm bulamadım.Pandalar matrisini saymak için dataframe

actual | predicted 
------ + --------- 
Apple | Apple 
Apple | Apple 
Apple | Banana 
Banana | Orange 
Orange | Apple 

Şunu istiyorum:

 | Apple | Banana | Orange 
------ + ------- + ------- + ------- 
Apple | 2  | 1  | 0 
Banana | 0  | 0  | 1 
Orange | 1  | 0  | 0 

cevap

6

Sen size toplayarak ile groupby kullanabilir ve unstackMultiIndex:

Ben pandalar böyle DataFrame var

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 

ile diğer çözüm 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 
+0

aradığınız düşünüyorum. İstenmeyen boyut() bana bir kesmek gibi görünüyor. –

+0

Kabul ettiğiniz için teşekkür ederiz! İlk çözüm daha hızlı, ama biraz kesmek olduğunu kabul ediyorum. – jezrael

+1

'[142] 'de:% timeit pd.crosstab (df.actual, df.predicted) 100 döngü, en iyi 3: her döngü için 5.04 ms ve ' In [143]:% timeit df.groupby ([ 'gerçek', 'öngörüldü']) Boyut() .Sıksız (fill_value = 0) 1000 döngü, en iyi 3: döngü başına 028 ms ' – jezrael

2

Karanlıkta bir atış 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

Bit kullanabilirsiniz, ama crosstab` `için Kabul bir confusion matrix

from sklearn.metrics import confusion_matrix 
print confusion_matrix(df['actual'], df['predicted'])