2016-04-03 31 views
1

Bir dizi değerden toplam çıkarma veya bölme elde etmek için yerleşik bir işlev var mıdır? Örneğinpandas serilerinde toplama veya bölme için toplama veya bölme alternatifi

:

s1 = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e']) 
s1 
a -0.238762 
b -0.669687 
c 0.618808 
d 1.056264 
e -1.472528 

result = 0.228405 

Ben subtract veya div yöntemlerle bir lambda fonksiyonunu oluşturmak ve dizi geçerli olmalıdır tahmin ediyorum, ama aynı seriye Bu yöntemlerin nasıl uygulanacağını görmüyorum. Ben pandalar çok direkt bir yolu vardır, ama numpy bunu yapmanın ufunc.reduce yöntem yoktur sanmıyorum

+0

Ne istediğinizi Sorunuzun ve 'result' gelen net değil. – Zero

+0

sadece basit bir çıkarma işlemidir. İlk değer eksi bir sonraki bir eksi diğeri ve benzeri ... Üzgünüz – gis20

+3

@ gis20: 21 soru sorduğunu, ancak herhangi bir cevap kabul etmediğinizi fark ettim. Lütfen eski sorularınızı tekrar gözden geçirmeyi ve [kabul edilen] olarak size yardımcı olan yanıtları işaretlemeyi düşünün (http://stackoverflow.com/help/accepted-answer). –

cevap

3

:

>>> s1 
a -0.238762 
b -0.669687 
c 0.618808 
d 1.056264 
e -1.472528 
Name: s1, dtype: float64 

>>> np.subtract.reduce(s1.values) 
0.22838100000000017 

(Not: Bu nedeniyle beklenen değere çok biraz farklıdır yuvarlama - Seriler yalnızca altı ondalık basamak basar.)

Bölüm için np.divide.reduce(s1.values)'u kullanabilirsiniz. Eğer gerçekten pandalar bu uygulamaya olsaydı


, yazabilirsiniz: yine 0.2283810... verir

s2 = -s1[::-1]    # multiply values by -1, reverse Series 
s2.iloc[-1] = -s2.iloc[-1] # set last value back to original sign 
s2.sum()     # sum 

. Yeni Seri s2'un oluşturulması ve indekslenmesi nedeniyle bu muhtemelen çok daha yavaş olacaktır.

1

reduce lambda işleviyle bu şekilde kullanabilirsiniz.

>>> reduce(lambda a, b: a - b, s) 
0.22838100000000017 

Ve bazı diğer ortak operasyonlar:

reduce(lambda a, b: a * b, s) 
-0.15389660387465764 

s.product() 
-0.15389660387465764 

reduce(lambda a, b: a/float(b), s) 
-0.3704259301942105 

reduce(lambda a, b: a + b, s) 
-0.70590500000000023 

s.sum() 
-0.7059050000000002