用Numpy查找百分比变化

时间:2018-10-30 15:25:03

标签: python numpy

我正在编写一个函数,以使用Numpy和函数调用查找百分比变化。到目前为止,我得到的是:

change(a,b):
  answer = (np.subtract(a[b+1], a[b])) / a[b+1] * 100
  return answer

  print(change(a,0))

“ a”是我制作的数组,b是我要计算的索引/数字。

例如:

我的阵列是

[[1,2,3,5,7]
 [1,4,5,6,7]
 [5,8,9,10,32]
 [3,5,6,13,11]]

如何计算1到2(= 0.5)或1到4(= 0.75)或5,7等之间的百分比变化。

注意:我知道如何从数学上获得更改,我不确定如何在python / numpy中进行此操作。

4 个答案:

答案 0 :(得分:2)

如果我正确理解,您正在尝试查找每一行的变化百分比,则可以执行以下操作:

>>> np.diff(a) / a[:,1:] * 100

哪个给您:

array([[ 50.        ,  33.33333333,  40.        ,  28.57142857],
       [ 75.        ,  20.        ,  16.66666667,  14.28571429],
       [ 37.5       ,  11.11111111,  10.        ,  68.75      ],
       [ 40.        ,  16.66666667,  53.84615385, -18.18181818]])

答案 1 :(得分:0)

import numpy as np
a = np.array([[1,2,3,5,7],
              [1,4,5,6,7],
              [5,8,9,10,32],
              [3,5,6,13,11]])    
np.array([(i[:-1]/i[1:]) for i in a])

答案 2 :(得分:0)

我知道您在记住Numpy时问了这个问题,并在上​​面得到了答案:

import numpy as np
np.diff(a) / a[:,1:]

我试图用熊猫解决这个问题。对于那些有相同问题,但使用熊猫代替Numpy的人

import pandas as pd 
data = [[1,2,3,4,5],
        [1,4,5,6,7],
        [5,8,9,10,32],
        [3,5,6,13,11]]

df = pd.DataFrame(data)
df_change = df.rolling(1,axis=1).sum().pct_change(axis=1)
print(df_change)

答案 3 :(得分:0)

如果您尝试从左至右计算%差异,则可接受的答案接近但不正确。 您应该得到以下百分比差异:

1,2,3,5,7 -> 100%, 50%, 66.66%, 40%

亲自检查:https://www.calculatorsoup.com/calculators/algebra/percent-change-calculator.php

按照Josmoor98所说的,您可以使用np.diff(a) / a[:,:-1] * 100获得从左到右的百分比差异,这将为您提供正确的答案。

array([[100.        ,  50.        ,  66.66666667,  40.        ],
       [300.        ,  25.        ,  20.        ,  16.66666667],
       [ 60.        ,  12.5       ,  11.11111111, 220.        ],
       [ 66.66666667,  20.        , 116.66666667, -15.38461538]])