Spalte im Pandas-Datenrahmen um eins verschieben?

89

Ich habe einen Pandas-Datenrahmen. Ich möchte eine meiner Spalten "hinterherhinken". Dies bedeutet beispielsweise, dass die gesamte Spalte 'gdp' um eins nach oben verschoben und dann alle überschüssigen Daten am Ende der verbleibenden Zeilen entfernt werden, sodass alle Spalten wieder gleich lang sind.

df =
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7

df_lag =
    y  gdp  cap
0   1    3    5
1   2    7    9
2   8    4    2
3   3    7    7

Wie auch immer, um das zu tun?

natsuki_2002
quelle

Antworten:

158
In [44]: df['gdp'] = df['gdp'].shift(-1)

In [45]: df
Out[45]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7
4  6  NaN    7

In [46]: df[:-1]                                                                                                                                                                                                                                                                                                               
Out[46]: 
   y  gdp  cap
0  1    3    5
1  2    7    9
2  8    4    2
3  3    7    7
Wouter Overmeire
quelle
1
Verwenden df.dropna()Sie einfach und es werden alle NaN-Zeilen gelöscht, ohne dass Sie die Anzahl der zu löschenden Zeilen angeben müssen.
ArmandduPlessis
8

Verschiebungsspalte gdp nach oben:

df.gdp = df.gdp.shift(-1)

und entfernen Sie dann die letzte Zeile

Friedlich
quelle
4

So verschieben Sie beispielsweise einfach um 5 Werte und entfernen auch die NaN-Zeilen, ohne die Anzahl der Werte verfolgen zu müssen, um die Sie verschoben haben:

d['gdp'] = df['gdp'].shift(-5)
df = df.dropna()
ArmandduPlessis
quelle
3
df.gdp = df.gdp.shift(-1) ## shift up
df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row
Bilal Mahmood
quelle
0

Verschieben Sie zuerst die Spalte:

df['gdp'] = df['gdp'].shift(-1)

Zweitens entfernen Sie die letzte Zeile, die eine NaN-Zelle enthält:

df = df[:-1]

Drittens den Index zurücksetzen:

df = df.reset_index(drop=True)
Jonas Freire
quelle