Przesunąć kolumnę w ramce danych pand o jeden?


87

Mam ramkę danych pandy. Chcę „opóźnić” jedną z moich kolumn. Oznacza to, na przykład, przesunięcie całej kolumny „gdp” w górę o jeden, a następnie usunięcie wszystkich nadmiarowych danych na dole pozostałych wierszy, tak aby wszystkie kolumny były znowu równej długości.

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

Zresztą to zrobić?

Odpowiedzi:


155
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
Po prostu użyj, df.dropna()a usunie wszystkie wiersze NaN bez konieczności określania liczby wierszy do usunięcia.
ArmandduPlessis

8

przesunięcie kolumny gdp w górę:

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

a następnie usuń ostatni wiersz


4

Aby na przykład łatwo przesunąć o 5 wartości, a także pozbyć się wierszy NaN, bez konieczności śledzenia liczby wartości, które przesunąłeś:

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

Najpierw przesuń kolumnę:

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

Po drugie usuń ostatni wiersz, który zawiera komórkę NaN:

df = df[:-1]

Po trzecie resetowanie indeksu:

df = df.reset_index(drop=True)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.