在熊猫系列中减去或除法的总和或刺激的替代方案

时间:2016-04-03 10:55:11

标签: python pandas division series subtraction

是否有内置函数可以获得一系列值的总减法或除法?

例如:

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

我想我应该使用lambdasubtract方法创建div函数并应用于该系列,但我不知道如何在同一系列中应用这些方法。

2 个答案:

答案 0 :(得分: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 :(得分:1)

这是reduce使用lambda函数的方法。

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