I’ve got a pandas dataframe. I want to ‘lag’ one of my columns. Meaning, for example, shifting the entire column ‘gdp’ up by one, and then removing all the excess data at the bottom of the remaining rows so that all columns are of equal length again.
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
Anyway to do this?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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
Method 2
shift column gdp up:
df.gdp = df.gdp.shift(-1)
and then remove the last row
Method 3
To easily shift by 5 values for example and also get rid of the NaN rows, without having to keep track of the number of values you shifted by:
d['gdp'] = df['gdp'].shift(-5) df = df.dropna()
Method 4
Time is going. And current Pandas documentation recommend this way:
df.loc[:, 'gdp'] = df.gdp.shift(-1)
Method 5
df.gdp = df.gdp.shift(-1) ## shift up df.gdp.drop(df.gdp.shape[0] - 1,inplace = True) ## removing the last row
Method 6
First shift the column:
df['gdp'] = df['gdp'].shift(-1)
Second remove the last row which contains an NaN Cell:
df = df[:-1]
Third reset the index:
df = df.reset_index(drop=True)
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0