Mudar coluna em um dataframe do pandas?

86

Eu tenho um dataframe do pandas. Eu quero 'retardar' uma de minhas colunas. Isso significa, por exemplo, deslocar a coluna inteira 'gdp' para cima em um e, em seguida, remover todos os dados em excesso na parte inferior das linhas restantes para que todas as colunas tenham o mesmo comprimento novamente.

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

Como fazer isso?

natsuki_2002
fonte

Respostas:

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
fonte
1
Basta usar df.dropna()e ele eliminará todas as linhas NaN sem que você precise especificar o número de linhas a serem eliminadas.
ArmandduPlessis de
8

deslocar o PIB da coluna para cima:

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

e, em seguida, remova a última linha

PeacefulBY
fonte
4

Para mudar facilmente 5 valores, por exemplo, e também se livrar das linhas NaN, sem ter que controlar o número de valores que você alterou:

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

Primeiro mude a coluna:

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

Em seguida, remova a última linha que contém uma célula NaN:

df = df[:-1]

Terceiro, redefina o índice:

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