2015-06-06 15 views
10

Son 3 saat boyunca bana çok fazla zorluk çeken umutlu bir soruya sahibim. Kolay olmalı.Pivot Tablolar veya Pandalar için Grup By?

İşte sorun.

+--------------------------+ 
|  Col 'X' Col 'Y' | 
+--------------------------+ 
|  class 1  cat 1 | 
|  class 2  cat 1 | 
|  class 3  cat 2 | 
|  class 2  cat 3 | 
+--------------------------+ 

İçine dataframe dönüştürmeye Aradıklarım: değerler değer sayımlardır

+------------------------------------------+ 
|     cat 1 cat 2 cat 3 | 
+------------------------------------------+ 
|  class 1   1  0  0 | 
|  class 2   1  0  1 | 
|  class 3   0  1  0 | 
+------------------------------------------+ 

Bir pandalar dataframe var. Herhangi bir fikri olan var mı? Teşekkürler! İşte

cevap

25

yollardan çift daha sonra pd.crosstab()

In [28]: pd.crosstab(df['Col X'], df['Col Y']) 
Out[28]: 
Col Y cat 1 cat 2 cat 3 
Col X 
class 1  1  0  0 
class 2  1  0  1 
class 3  0  1  0 

2) kullanma verilerinizi df

In [27]: df 
Out[27]: 
    Col X Col Y 
0 class 1 cat 1 
1 class 2 cat 1 
2 class 3 cat 2 
3 class 2 cat 3 

1) yeniden şekillendirmek Veya, Col Y üzerinde unstack ile 'Col X','Col Y' üzerinde groupby kullanmak için vardır NaNs'u sıfırlarla doldurun.

In [29]: df.groupby(['Col X','Col Y']).size().unstack('Col Y', fill_value=0) 
Out[29]: 
Col Y cat 1 cat 2 cat 3 
Col X 
class 1  1  0  0 
class 2  1  0  1 
class 3  0  1  0 

3) Veya, index=Col X ile pd.pivot_table() kullanın columns=Col Y

In [30]: pd.pivot_table(df, index=['Col X'], columns=['Col Y'], aggfunc=len, fill_value=0) 
Out[30]: 
Col Y cat 1 cat 2 cat 3 
Col X 
class 1  1  0  0 
class 2  1  0  1 
class 3  0  1  0 

4) Veya, unstack

In [492]: df.assign(v=1).set_index(['Col X', 'Col Y'])['v'].unstack(fill_value=0) 
Out[492]: 
Col Y cat 1 cat 2 cat 3 
Col X 
class 1  1  0  0 
class 2  1  0  1 
class 3  0  1  0 
+0

Teşekkür John ile set_index kullanmak - yani, inanılmaz yararlı oldu özellikle farklı olasılıklar sağlar s! Çapraz sekme olasılığını bile düşünmedim. – SteelyDanish

+0

Üçünün de karşılaştırdığın için teşekkürler. Varsayılan olarak gruplandırmayı ve sık sık kullanılan pivot_table öğelerini görüyorum. –

+0

bunun karşısında geldi, çünkü groupby ve pivot_table arasındaki ve ne zaman kullanılacağı arasındaki farkı anlamaya çalışıyordum. Cevabınız kesinlikle yardımcı oldu. Farklı kavramlar hakkında kolayca anlaşılır bilgi biliyor musunuz? şerefe –

İlgili konular