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?

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

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


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()

3
df.gdp = df.gdp.shift(-1) ## shift up
df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row

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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.