¿Desplazar la columna en el marco de datos de pandas hacia arriba en uno?

86

Tengo un marco de datos de pandas. Quiero "retrasar" una de mis columnas. Es decir, por ejemplo, desplazar toda la columna 'pib' hacia arriba en uno y luego eliminar todos los datos en exceso en la parte inferior de las filas restantes para que todas las columnas vuelvan a tener la misma longitud.

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

¿Alguna forma de hacer esto?

natsuki_2002
fuente

Respuestas:

154
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
fuente
1
Solo use df.dropna()y eliminará todas las filas de NaN sin tener que especificar el número de filas para eliminar.
ArmandduPlessis
8

desplazar columna pib hacia arriba:

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

y luego quita la última fila

PacíficaBY
fuente
4

Para cambiar fácilmente en 5 valores, por ejemplo, y también deshacerse de las filas de NaN, sin tener que realizar un seguimiento del número de valores que cambió por:

d['gdp'] = df['gdp'].shift(-5)
df = df.dropna()
ArmandduPlessis
fuente
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
fuente
0

Primero cambie la columna:

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

En segundo lugar, elimine la última fila que contiene una celda NaN:

df = df[:-1]

En tercer lugar, restablezca el índice:

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