2015-07-29 28 views
5

Utworzono dwie serie: s1 i s2 z df.Pomnóż dwie serie pand z niedopasowanymi indeksami

Każda ma tę samą długość, ale różniące się indeksy. s1.multiply(s2) oznacza związki z niedopasowanymi indeksami zamiast ich mnożenia.

Po prostu chcę pomnożyć entrywise s1 przeciwko s2 ignorując niedopasowane indeksy.

Mogę uruchomić s1.reset_index() i s2.reset_index(), a następnie zabrać kolumnę, którą chcę z tych dwóch df, ponieważ zamienia oryginalny indeks w osobną kolumnę, ale to jest nużące i pomyślałem, że może być prostszy sposób to zrobić.

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

nie wydają się działać albo

+0

można przekonwertować do tablicy która numpy zignoruj ​​indeks za pomocą "wartości": 's1.values.mul (s2.values)'. – JohnE

+0

Dzięki John, to rzeczywiście działa, aby pomnożyć wartości serii. Niestety, konwertuje serię na tablicę numpy. Czy znasz sposób na zachowanie całego procesu przy użyciu serii, zamiast przechodzenia do numpy array, a następnie z powrotem do serii (result = pandas.Series (s1.values ​​* s2.values))? – intdt

+0

's1 * s2.values' powinno działać – EdChum

Odpowiedz

1

myślę dzieje z reset_index() jest droga, ale istnieje opcja do spadku indeksu, nie naciskać go z powrotem do dataframe.

Jak to:

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 

Powodem faworyzować podejście reset_index() przed innymi sugerowanego podejścia ze po prostu przez pomnożenie wartości

s1 * s2.values 

jest to, że nie jest bardzo wyraźny. Ta linia nie mówi mi, że istnieje problem z indeksem, który rozwiązujesz.

Chociaż ta linia opowiada historię bardzo wyraźnie, że jesteś rozwiązując problem index:

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

Albo rozbicie go do wielu wierszy:

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