2015-07-29 25 views
5

Creata due serie: s1 e s2 da df.Moltiplica due serie di panda con indici non corrispondenti

Ciascuno ha la stessa lunghezza ma indici diversi. s1.multiply(s2) unioni gli indici non corrispondenti invece di moltiplicarsi contro di loro.

Voglio solo moltiplicare il valore iniziale da s1 contro s2 ignorando gli indici non corrispondenti.

potevo correre s1.reset_index() e s2.reset_index() e poi prendere la colonna che voglio da questi due DFS, in quanto trasforma l'indice originale in una colonna separata, ma è noioso e ho pensato che ci potrebbe essere un modo più semplice per farlo.

s1.multiply(s2, axis='columns') 

non sembra funzionare sia

+0

è possibile convertire in un array di NumPy che sarà ignora l'indice con 'values':' s1.values.mul (s2.values) '. – JohnE

+0

Grazie John, funziona davvero per moltiplicare i valori della serie. Sfortunatamente, converte la serie in una matrice numpy. Sei a conoscenza di un modo per mantenere l'intero processo utilizzando le serie, invece di passare agli array di numpy e quindi tornare alle serie (risultato = pandas.Series (s1.values ​​* s2.values))? – intdt

+0

's1 * s2.values' dovrebbe funzionare – EdChum

risposta

1

Penso che andando con reset_index() è la via, ma v'è la possibilità di eliminare l'indice, non spingerlo indietro nel dataframe.

Ti piace questa:

s1 = pd.Series([1,2,3,4,5,6,7], index=[52,34,3,53,636,7,4]) 
52  1 
34  2 
3  3 
53  4 
636 5 
7  6 
4  7 
dtype: int64 

s1.reset_index(drop=True) 
0 1 
1 2 
2 3 
3 4 
4 5 
5 6 
6 7 
dtype: int64 

Il motivo per cui preferisco l'approccio reset_index() prima che l'altro approccio suggerito con semplicemente moltiplicando per valori

s1 * s2.values 

è che questo non è molto esplicito. Questa riga non mi dice che c'è un problema con l'indice che stai risolvendo.

Mentre questa linea racconta la storia molto esplicitamente che si sta risolvendo un problema di indice:

s1.reset_index(drop=True) * s2.reset_index(drop=True) 

o rompere verso il basso per più righe:

s1.reset_index(inplace=True, drop=True) 
s2.reset_index(inplace=True, drop=True) 
s1 * s2