2015-07-29 22 views
5

ho un dataframe ave_data che contiene quanto segue:Aggiungere colonna alla fine del panda dataframe contenente media dei dati precedenti

ave_data 

Time  F7   F8   F9 
00:00:00 43.005593 -56.509746 25.271271 
01:00:00 55.114918 -59.173852 31.849262 
02:00:00 63.990762 -64.699492 52.426017 

Voglio aggiungere un'altra colonna a questa dataframe, contenente la media dei valori in colonna F7, F8 e F9 per ogni riga.

ave_data DataFrame può cambiare dimensione come il mio codice legge da diversi file Excel in seguito, quindi il metodo deve essere generico (ad esempio aggiungere la colonna contenente la media sempre come l'ultima colonna in DataFrame, non nella colonna numero 4)

desired output 

Time  F7   F8   F9   Average 
00:00:00 43.005593 -56.509746 25.271271 4.25 
01:00:00 55.114918 -59.173852 31.849262 9.26 
02:00:00 63.990762 -64.699492 52.426017 17.24 

risposta

6

si può prendere una copia del vostro df utilizzando copy() e poi basta chiamare mean e passare params axis=1 e numeric_only=True in modo che la media è calcolata row-saggio e di ignorare le colonne non numerici, quando si esegue il seguente la colonna viene sempre aggiunta alla fine:

In [68]: 

summary_ave_data = df.copy() 
summary_ave_data['average'] = summary_ave_data.mean(numeric_only=True, axis=1) 
summary_ave_data 
Out[68]: 
       Time   F7   F8   F9 average 
0 2015-07-29 00:00:00 43.005593 -56.509746 25.271271 3.922373 
1 2015-07-29 01:00:00 55.114918 -59.173852 31.849262 9.263443 
2 2015-07-29 02:00:00 63.990762 -64.699492 52.426017 17.239096 
+0

ha funzionato perfettamente. Grazie per la spiegazione - molto utile! – LinnK

+0

Domanda aggiuntiva rapida: Se desidero aggiungere le seguenti ** tre ** colonne alla fine: Min, Max, Media (di ogni riga), posso fare quanto segue (il mio programma IDLE non funziona correttamente al momento ..): summary_ave_data ['Min'] = summary_ave_data.min (numeric_only = True, axis = 1); summary_ave_data ['Max'] = summary_ave_data.max (numeric_only = True, axis = 1); summary_ave_data ['average'] = summary_ave_data.mean (numeric_only = True, axis = 1) – LinnK

+0

Sì, dovrebbe funzionare correttamente – EdChum

0

@LaangeHaare o chiunque altro che è curioso, ho appena provato e la parte copia della risposta accettata sembra inutile (forse mi manca qualcosa ...)

Così si potrebbe semplificare questo con:

df['average'] = df.mean(numeric_only=True, axis=1) 

avrei semplicemente aggiunto questo come un commento questo, ma non ho la reputazione