Как вы перемещаете Pandas DataFrame с помощью multiindex?
С помощью следующего DataFrame, как я могу сдвинуть столбец "beyer" на основе индекса без Pandas присваивать сдвинутое значение другому значению индекса?
line_date line_race beyer
horse
Last Gunfighter 2013-09-28 10 99
Last Gunfighter 2013-08-18 10 102
Last Gunfighter 2013-07-06 8 103
.....
Paynter 2013-09-28 10 103
Paynter 2013-08-31 10 88
Paynter 2013-07-27 8 100
df['beyer'].shift(1)
производит...
line_date line_race beyer beyer_shifted
horse
Last Gunfighter 2013-09-28 10 99 NaN
Last Gunfighter 2013-08-18 10 102 99
Last Gunfighter 2013-07-06 8 103 102
.....
Paynter 2013-09-28 10 103 71
Paynter 2013-08-31 10 88 103
Paynter 2013-07-27 8 100 88
Проблема в том, что Пейнтеру был предоставлен бейер, которому был присвоен последний боевик (его первая запись). Вместо этого я хочу, чтобы это было так...
line_date line_race beyer beyer_shifted
horse
Last Gunfighter 2013-09-28 10 99 NaN
Last Gunfighter 2013-08-18 10 102 99
Last Gunfighter 2013-07-06 8 103 102
.....
Paynter 2013-09-28 10 103 NaN
Paynter 2013-08-31 10 88 103
Paynter 2013-07-27 8 100 88
Ответы
Ответ 1
Используйте groupby/shift
, чтобы применить сдвиг к каждой группе отдельно: (Спасибо Джеффу за указание этого упрощения.)
In [60]: df['beyer_shifted'] = df.groupby(level=0)['beyer'].shift(1); df
Out[61]:
line_date line_race beyer beyer_shifted
Last Gunfighter 2013-09-28 10 99 NaN
Last Gunfighter 2013-08-18 10 102 99
Last Gunfighter 2013-07-06 8 103 102
Paynter 2013-09-28 10 103 NaN
Paynter 2013-08-31 10 88 103
Paynter 2013-07-27 8 100 88
Если у вас есть multiindex, вы можете группировать более одного уровня, передавая последовательность ints
или именам уровня в параметр groupby's
level
.