2017-06-20 6 views
0

ich Pandas Datenrahmen So wie dieserPandas Datenrahmen: Berechnung der Variation über Jahre

Years {2000, ..., 2001, ..., 2002, ...} 
product {'A', 'B', 'C', 'D', ...} 
price $ {10, 11, 12, 13, 14, ...} 

habe ich viele Produkte haben, mit unterschiedlichen Preisen im Laufe der Jahre für jeden von ihnen Ich möchte die jährlich berechnen Evolution für jedes Produkt Jahr für Jahr

Ich kann das mit einer for-Schleife tun, wo für jede Zeile suche ich nach dem Produkt und dem Jahr + 1, um den Preis zu bekommen, aber es klingt schwer und lang zu erfüllen.

Gibt es einen besseren Weg, dies zu tun?

die beste (für spätere Zwecke) wäre etwas zu bekommen, wie die

Years {2000, ..., 2001, ..., 2002, ...} 
product {'A', 'B', 'C', 'D', ...} 
price $ {10, 11, 12, 13, 14, ...} 
next price $ {11, 13, 14, 12, 14, ...} 

Schließlich weiß ich, dass ein Produkt für das Jahr 2000 einen Preis von $ 10 und den nächsten Preis hat (2001) von 11 $

hoffe du verstehst mich! Vielen Dank im Voraus AE

Antwort

1
df = pd.DataFrame({'Years': [2000]*4+[2001]*2+[2000]*2+[2001]*2+[2002]*4, 
        'Product': [np.random.choice(['A', 'B', 'C', 'D']) for _ in range(0, 14)], 
        'Price': np.random.uniform(1,5, size=14)}) 

res = df.sort_values('Years').set_index('Years').groupby('Product').apply(lambda x: x['Price'].diff()) 

Product Years 
A  2001   NaN 
B  2001   NaN 
     2001  3.176459 
     2002 -0.743620 
C  2000   NaN 
     2000  1.450093 
     2001 -0.040187 
     2002 -3.237749 
D  2000   NaN 
     2000 -0.670978 
     2000  0.434457 
     2000  0.280269 
     2002 -0.002989 
     2002  2.671679 
+0

perfekt Dank! Ich kann mit diff() verwalten, um den nächsten Preis für andere Berechnungen zu erhalten. – user8189873

+0

Großartig! Glücklich, geholfen zu haben. –

Verwandte Themen