2012-10-03 40 views
8

Tengo una lista de precios en la que intento calcular el cambio en el porcentaje de cada número. He calculado las diferencias conCálculo del cambio en el porcentaje entre dos números (Python)

prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6] 

    def f(): 
     for i in range(len(prices)): 
      print(prices[i]-prices[i-1]) 

que devuelve las diferencias como

2.1 
    -0.8 
    -0.5 
    ... 

sé que el cambio en el porcentaje sería ((i- (i-1))/(i-1) * 100 , pero no sé cómo incorporar eso en el guión Cualquier ayuda sería muy apreciada

+0

es probable que desee 'rango (1, Len (precios))' - de lo contrario lo primero que se imprime será la diferencia entre los últimos y primeros elementos de la lista. –

+0

Tiene la ecuación de porcentaje de cambio incorrecta ... Puede pensar en una ecuación de error de% que va como abs (xy)/x, donde x es el valor correcto en teoría, pero la diferencia es abs (xy)/promedio x, y – jeremy

+0

Tienes razón, David. Cambié el rango como sugirió y enmendé la última línea para 'imprimir ((precios [i] -precios [i-1])/precios [i-1] * 100)' –

Respuesta

8

Prueba esto:..

prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6] 

for a, b in zip(prices[::1], prices[1::1]): 
    print 100 * (b - a)/a 

Editar: Si desea que esta forma de lista, usted puede hacer esto:

print [100 * (b - a)/a for a, b in zip(prices[::1], prices[1::1])] 
+0

Editar: Después del primer par de valores, los números se disparan: 6.90789473684, -1.57728706625, 4.28134556575 , 5.58659217877 , 0,0 , 0,0 , 0,0 , 0,0 , -5.5900621118 , ,327868852459 , 0,0 –

+0

Lo que hacer ¿media? – arshajii

+0

¿Qué salida esperabas? – arshajii

10

Si usted no ha estado expuesto a la biblioteca pandas en Python (http://pandas.pydata.org/), definitivamente deberías echarle un vistazo.

Hacer esto es tan fácil como:

import pandas as pd 
prices = [30.4, 32.5, 31.7, 31.2, 32.7, 34.1, 35.8, 37.8, 36.3, 36.3, 35.6] 

price_series = pd.Series(prices) 
price_series.pct_change() 
Cuestiones relacionadas