Seite 1 von 1

Pandas Variable zeitlich verschieben

Verfasst: Montag 11. März 2019, 12:35
von mogi
Hallo zusammen,

ich habe einen größeren Datensatz mit jährlichen Daten (Wirtschaftsleistung, 'gdp') und für verschiedene Alter die Geburtenziffer('preg rage'):

Code: Alles auswählen

import pandas as pd, numpy as np
frame = pd.DataFrame({
  'year':[1950,1050,1950,1951,1951,1951,1951],
  'age':[15,16,17,15,16,17,18],
  'preg_rate':[0.21,0.1,0.3,0.4,0.32,0.2,0.01],
  'gdp':[600,600,600,650,650,650,650]
  })
  
frame
Out[8]: 
   year  age  preg_rate  gdp
0  1950   15       0.21  600
1  1950   16       0.10  600
2  1950   17       0.30  600
3  1951   15       0.40  650
4  1951   16       0.32  650
5  1951   17       0.20  650
6  1951   18       0.01  650
Jetzt möchte ich die Veränderung dieser Daten ggü. dem Vorjahr berechnen. Dazu war mein Plan, neue Spalten anzulegen, in denen dann die Werte aus dem Vorjahr stehen.
Für die Geburtenziffer habe ich nach Recherche folgenden Befehl benutzt:

Code: Alles auswählen

frame['lastpregrate']=frame.groupby('age')['preg_rate'].shift(1).head(7)

frame
Out[12]: 
   year  age  preg_rate  gdp  lastpregrate
0  1950   15       0.21  600           NaN
1  1950   16       0.10  600           NaN
2  1950   17       0.30  600           NaN
3  1951   15       0.40  650          0.21
4  1951   16       0.32  650          0.10
5  1951   17       0.20  650          0.30
6  1951   18       0.01  650           NaN
So weit, so gut. Jetzt möchte ich aber noch die Spalte 'gdp' verschieben. Kann mir dabei jemand helfen?

Vielen Dank und viele Grüße

Re: Pandas Variable zeitlich verschieben

Verfasst: Mittwoch 13. März 2019, 16:19
von habanero
Wenn du mit 'verschieben' meinst die Reihenfolge der spalten zu ändern, dann suchst du vermutlich einfach

Code: Alles auswählen

frame.reindex(columns=['spalte c', 'spalte b', 'spalte a'...])
Siehe auch https://pandas.pydata.org/pandas-docs/s ... index.html

Mit freundlichen Grüßen
habanero

Re: Pandas Variable zeitlich verschieben

Verfasst: Donnerstag 14. März 2019, 10:53
von mogi
Hallo habanero,

ich habe mich wohl falsch ausgedrückt. Ich möchte nicht die Spalte selbst verschieben, sondern die Werte zeitlich verschieben.
Oder, im Endeffekt, möchte ich die Differenz zum Vorjahr / zu X Jahren vorher ausrechnen. So wie bei der Spalte 'lastpregrate' schon geschehen.