2016-04-03 7 views
1

一連の値の合計減算または除算を得る組み込み関数はありますか?例えばパンダシリーズの減算または除算のために合計またはプロットする代替手段

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 

私はsubtractまたはdiv方法でlambda関数を作成し、シリーズに適用されるべきであると思いますが、私は同じシリーズで、これらの方法を適用する方法が表示されません。私はパンダで非常に直接的な方法がありますが、numpyの中でこれを行うにはufunc.reduce方法があるとは思わない

+0

それはあなたが望むもの、あなたの質問や 'result'から明らかではありません。 – Zero

+0

それは単純な減算に過ぎません。最初の値から次の値を差し引いて次の値を差し引いて次のものを差し引くなど...申し訳ありません – gis20

+3

@ gis20:21の質問をしましたが、回答を受け付けていません。あなたの古い質問を再訪し、そこにあなたを助けた回答を[承諾](http://stackoverflow.com/help/accepted-answer)としてマークしてください。 –

答えて

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 

(注:これが原因にご期待値に非常にわずかに異なっています丸め - 小数点以下6桁までしか印刷されません)

np.divide.reduce(s1.values)を使用できます。あなたが本当にパンダでこれを実装しなければならないとしたら


、あなたが書くことができます:再び0.2283810...を生み出す

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 

を。これはおそらく、新しいシリーズs2の作成と索引付けにより、はるかに遅くなります。

1

これは、ラムダ関数でreduceを使用する方法です。

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

そして、いくつかの他の一般的な操作:

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 
関連する問題