2012-06-11 143 views
44

Vorrei spostare una colonna in un Panda DataFrame, ma non sono stato in grado di trovare un metodo per farlo dalla documentazione senza riscrivere l'intero DF. Qualcuno sa come farlo? dataframe:Come spostare una colonna in Pandas DataFrame

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

output desiderato:

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

risposta

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

Il risultato non è presente ## 5. C'è un modo semplice nei panda per estendere l'indice quando si usa il turno? –

+0

@WaylonWalker Questo si chiama rolling in numpy: 'df ['x2'] = np.roll (df ['x2'], 1)' – ayhan

1

Se non si vuole perdere le colonne che si spostamento passato alla fine del tuo dataframe, è sufficiente aggiungere il numero necessario prima :

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

Suppongo importazioni

import pandas as pd 
import numpy as np 

Prima accodare nuova riga con NaN, NaN,... a fine dataframe (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 

Creerà nuovo DF df2. Forse c'è un modo più elegante ma funziona.

Ora è possibile spostarlo:

df2.x2 = df2.x2.shift(1) # shift what you want 
Problemi correlati