Сдвинуть столбец в кадре данных pandas на один?


87

У меня есть фреймворк pandas. Я хочу «запаздывать» одну из моих колонок. Это означает, например, сдвиг всего столбца 'gdp' вверх на единицу, а затем удаление всех лишних данных в нижней части оставшихся строк, чтобы все столбцы снова стали равной длины.

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

Как бы то ни было сделать это?

Ответы:


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
Просто используйте, df.dropna()и он отбросит все строки NaN без необходимости указывать количество строк для удаления.
ArmandduPlessis

8

сдвинуть столбец gdp вверх:

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

а затем удалите последнюю строку


4

Например, чтобы легко сдвинуть на 5 значений, а также избавиться от строк NaN, не отслеживая количество сдвинутых значений:

d['gdp'] = df['gdp'].shift(-5)
df = df.dropna()


0

Сначала сместите столбец:

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

Во-вторых, удалите последнюю строку, содержащую ячейку NaN:

df = df[:-1]

Третий сброс индекса:

df = df.reset_index(drop=True)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.