Sia la tabella pivot pandas.crosstab che quella pivot sembrano fornire la stessa identica funzionalità. Ci sono delle differenze?In che modo una tabella a campi incrociati di Pandas è diversa da un pivot_table di Pandas?
risposta
è lo stesso, se in uso pivot_table
aggfunc=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.
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.
Ma sembra che si possa anche avere un 'aggfunc' per la funzione crosstab. –