Нахождение процентного изменения с Numpy - PullRequest
0 голосов
/ 30 октября 2018

Я пишу функцию, чтобы найти процентное изменение, используя Numpy и вызовы функций. Пока что я получил:

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

Ответы [ 3 ]

0 голосов
/ 30 октября 2018
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])
0 голосов
/ 30 октября 2018

Я знаю, что вы задали этот вопрос, имея в виду 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)
0 голосов
/ 30 октября 2018

Если я правильно понимаю, что вы пытаетесь найти процентное изменение в каждой строке, то вы можете сделать:

>>> 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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...