是否有内置函数可以获得一系列值的总减法或除法?
例如:
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
或subtract
方法创建div
函数并应用于该系列,但我不知道如何在同一系列中应用这些方法。
答案 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