2016-03-28 9 views

risposta

8

è lo stesso, se in uso pivot_tableaggfunc=len e fill_value=0:

pd.crosstab(df['Col X'], df['Col Y']) 
pd.pivot_table(df, index=['Col X'], columns=['Col Y'], aggfunc=len, fill_value=0) 

EDIT: Non v'è più differenza:

predefinito aggfunc sono diversi: pivot_table-np.mean, crosstab-len.

Il parametro margins_name è solo in pivot_table.

In pivot_table è possibile utilizzare Grouper per index e columns parole chiave.


penso che se avete bisogno semplicemente tabella di frequenza, crosstab funzione è meglio.

+0

Ma sembra che si possa anche avere un 'aggfunc' per la funzione crosstab. –

11

La differenza principale tra i due è che pivot_table prevede che i dati di input siano già un DataFrame; passare un DataFrame a pivot_table e specificare lo index/columns/values passando i nomi di colonna come stringhe. Con cross_tab, non è necessario disporre di un DataFrame, poiché si passa semplicemente oggetti di tipo array per index/columns/values.

Guardando il source code per crosstab, si riprende in sostanza gli oggetti array come si passa, crea un dataframe, poi chiama pivot_table a seconda dei casi.

In generale, utilizzare pivot_table se si dispone già di un DataFrame, in modo da non avere il sovraccarico aggiuntivo di creare nuovamente lo stesso DataFrame. Se stai iniziando da oggetti tipo array e riguarda solo i dati pivot, usa crosstab. Nella maggior parte dei casi, non penso che farà davvero la differenza quale funzione decidi di usare.

Problemi correlati