2016-04-03 32 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 

我想我应该创建一个lambda功能与subtractdiv方法和适用于系列,但我不明白如何应用在同一个系列的这些方法。

+0

这不是从你的问题和'result',清楚你要什么。 – Zero

+0

它只是一个简单的减法。第一个值减去下一个减去下一个,等等......对不起 – gis20

+3

@ gis20:我注意到你已经提出了21个问题,但没有接受任何答案。请考虑重新审视您的旧问题,并将[帮助您]的答案标记为[已接受](http://stackoverflow.com/help/accepted-answer)。 –

回答

3

我不认为有在熊猫一个非常直接的方式,但在与NumPy存在ufunc.reduce方法来做到这一点:

>>> 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 

(注:这是您的预期值略微不同,由于四舍五入 - 该系列仅打印六位小数。)

对于除法,您可以使用np.divide.reduce(s1.values)


如果你真的有大熊猫中实现这一点,你可以写:

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 

再次得到0.2283810...。由于新系列s2的创建和索引,这可能会慢得多。

1

这是如何使用带有lambda函数的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