Voglio dire qualcosa del genere:Come discretizzare i valori in un DataFrame di panda e convertirli in una matrice binaria?
Ho un DataFrame
con colonne che possono essere categoriali o nominali. Per ogni osservazione (riga), voglio generare una nuova riga in cui ogni possibile valore per le variabili è ora la sua stessa variabile binaria. Ad esempio, questa matrice (prima riga sia etichette di colonna)
'a' 'b' 'c'
one 0.2 0
two 0.4 1
two 0.9 0
three 0.1 2
one 0.0 4
two 0.2 5
verrebbe convertito in qualcosa di simile:
'a' 'b' 'c'
one two three [0.0,0.2) [0.2,0.4) [0.4,0.6) [0.6,0.8) [0.8,1.0] 0 1 2 3 4 5
1 0 0 0 1 0 0 0 1 0 0 0 0 0
0 1 0 0 0 0 0 1 0 1 0 0 0 0
0 1 0 0 0 0 0 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 1 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 1 0
0 1 0 0 1 0 0 0 0 0 0 0 0 1
Ogni (colonna) variabile nella matrice iniziale ottenere raggruppate in tutte le possibili valori . Se è categoriale, ogni valore possibile diventa una nuova colonna. Se si tratta di un float, i valori vengono divisi in un modo (ad esempio, dividendo sempre in 10 contenitori). Se è un int, allora può essere ogni possibile valore int, o forse anche binning.
FYI: nella mia vera applicazione, la tabella ha fino a 2 milioni di righe e la matrice "espansa" completa può avere centinaia di colonne.
Esiste un modo semplice per eseguire questa operazione?
Separatamente, vorrei anche saltare questo passaggio, poiché sto davvero cercando di calcolare una tabella Burt (che è una matrice simmetrica delle tabelle incrociate). C'è un modo semplice per fare qualcosa di simile con la funzione crosstab
? Altrimenti, calcolare la tabulazione incrociata è solo una semplice moltiplicazione di matrice.
C'è un modo per eseguire qualcosa di simile da un sapiente uso di 'crosstab' o' 'pivot_table' o stack' o qualcosa di simile? –
Certo, per 'a' e 'c' è facile: 'pandas.concat ([pandas.crosstab (df.index, [df.a]), pandas.crosstab (df.index, [df.c])] , asse = 1) '.Per 'b', suppongo che si possa fare specificando un corretto 'aggfunc' in 'crosstab' ... – lbolla