2012-06-11 24 views
44

Me gustaría desplazar una columna en Pandas DataFrame, pero no he podido encontrar un método para hacerlo desde la documentación sin volver a escribir todo el DF. Alguien sabe como hacerlo? trama de datos:Cómo cambiar una columna en Pandas DataFrame

## x1 x2 
##0 206 214 
##1 226 234 
##2 245 253 
##3 265 272 
##4 283 291 

salida deseada:

## x1 x2 
##0 206 nan 
##1 226 214 
##2 245 234 
##3 265 253 
##4 283 272 
##5 nan 291 

Respuesta

85
In [18]: a 
Out[18]: 
    x1 x2 
0 0 5 
1 1 6 
2 2 7 
3 3 8 
4 4 9 

In [19]: a.x2 = a.x2.shift(1) 

In [20]: a 
Out[20]: 
    x1 x2 
0 0 NaN 
1 1 5 
2 2 6 
3 3 7 
4 4 8 
+3

El resultado es que falta ## 5. ¿Hay una manera fácil en pandas de extender el índice cuando se usa shift? –

+0

@WaylonWalker Eso se llama enrollar en numpy: 'df ['x2'] = np.roll (df ['x2'], 1)' – ayhan

1

Si no quiere perder las columnas que Shift pasado al final de su trama de datos, simplemente añada el número requerido primero :

offset = 5 
    DF = DF.append([np.nan for x in range(offset)]) 
    DF = DF.shift(periods=offset) 
    DF = DF.reset_index() #Only works if sequential index 
1

Supongo que importa

import pandas as pd 
import numpy as np 

Primera append nueva fila con NaN, NaN,... al final de trama de datos (df).

s1 = df.iloc[0] # copy 1st row to a new Series s1 
s1[:] = np.NaN  # set all values to NaN 
df2 = df.append(s1, ignore_index=True) # add s1 to the end of df 

Creará un nuevo DF df2. Tal vez hay una manera más elegante, pero esto funciona.

Ahora se puede desplazarlo:

df2.x2 = df2.x2.shift(1) # shift what you want 
Cuestiones relacionadas