2013-05-07 62 views
6

È possibile moltiplicare tutte le colonne in un Pandas.DataFrame insieme per ottenere un valore singolo per ogni riga nel DataFrame?Moltiplica tutte le colonne in un dataframe di Pandas insieme

A titolo di esempio, utilizzando

df = pd.DataFrame(np.random.randn(5,3)*10) 

voglio un nuovo DataFramedf2 dove df2.ix[x,0] avrà il valore di df.ix[x,0] * df.ix[x,1] * df.ix[x,2].

Tuttavia, non voglio eseguire l'hardcode, come posso utilizzare un loop per raggiungere questo obiettivo?

Ho trovato una funzione df.mul(series, axis=1) ma non riesco a trovare un modo per usarlo per il mio scopo.

risposta

13

Si potrebbe utilizzare DataFrame.prod():

>>> df = pd.DataFrame(np.random.randint(1, 10, (5, 3))) 
>>> df 
    0 1 2 
0 7 7 5 
1 1 8 6 
2 4 8 4 
3 2 9 5 
4 3 8 7 
>>> df.prod(axis=1) 
0 245 
1  48 
2 128 
3  90 
4 168 
dtype: int64 

Si potrebbe anche applynp.prod, che è quello che avevo originariamente fatto, ma di solito quando disponibili i metodi diretti sono più veloci.

>>> df = pd.DataFrame(np.random.randint(1, 10, (5, 3))) 
>>> df 
    0 1 2 
0 9 3 3 
1 8 5 4 
2 3 6 7 
3 9 8 5 
4 7 1 2 
>>> df.apply(np.prod, axis=1) 
0  81 
1 160 
2 126 
3 360 
4  14 
dtype: int64 
Problemi correlati