2012-06-06 6 views
5

Ho un dataframe da un domande a scelta multipla ed è formattato in questo modo:Come convertire i dataframe dei panda in modo che l'indice sia l'insieme univoco di valori e il dato sia il conteggio di ciascun valore?

 Sex Qu1 Qu2 Qu3 
Name 
Bob M 1 2 1 
John M 3 3 5 
Alex M 4 1 2 
Jen F 3 2 4 
Mary F 4 3 4 

I dati sono un punteggio da 1 a 5 per le 3 domande a scelta multipla. Voglio riorganizzare i dati in modo che l'indice sia range (1,6) dove 1 = 'bad', 2 = 'poor', 3 = 'ok', 4 = 'good', 5 = 'excellent', le colonne sono lo stesso e il dato è il conteggio delle occorrenze numeriche dei valori (esclusa la colonna Sesso). Questo è fondamentalmente un istogramma di dimensioni bin predefinite e l'asse x etichettato con stringhe. Mi piace l'output di df.plot() molto meglio di df.hist() ma non riesco a capire come riordinare il tavolo per darmi un istogramma di dati. Inoltre, come si cambiano le x-label come stringhe?

risposta

17

Series.value_counts ti dà l'istogramma che stai cercando:

In [9]: df['Qu1'].value_counts() 
Out[9]: 
4 2 
3 2 
1 1 

Quindi, applicare questa funzione per ciascuna di queste 3 colonne:

In [13]: table = df[['Qu1', 'Qu2', 'Qu3']].apply(lambda x: x.value_counts()) 

In [14]: table 
Out[14]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 NaN 2 1 
3 2 2 NaN 
4 2 NaN 2 
5 NaN NaN 1 

In [15]: table = table.fillna(0) 

In [16]: table 
Out[16]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 0 2 1 
3 2 2 0 
4 2 0 2 
5 0 0 1 

Utilizzando table.reindex o table.ix[some_array] è possibile riorganizzare i dati .

a trasformarsi in una stringa, utilizzare table.rename:

In [17]: table.rename(index=str) 
Out[17]: 
    Qu1 Qu2 Qu3 
1 1 1 1 
2 0 2 1 
3 2 2 0 
4 2 0 2 
5 0 0 1 

In [18]: table.rename(index=str).index[0] 
Out[18]: '1' 
+0

Questo è proprio quello che mi serviva. Grazie. L'unico problema che ho riscontrato è quando ho normalizzato i dati in percentuale (per colonna) e ho utilizzato i nomi per alcuni degli indici, quindi ho tracciato le etichette dell'asse x errate a sinistra. Se lascio l'indice come numeri interi o valori di dati come numeri interi, funziona correttamente. – dailyglen