¿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?

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

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


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

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

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)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.