¿Cómo cambiar varias filas en un dataframe de pandas?

Tengo el siguiente Dataframe de pandas:

import pandas as pd data = {'one' : pd.Series([1.], index=['a']), 'two' : pd.Series([1., 2.], index=['a', 'b']), 'three' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} df = pd.DataFrame(data) df = df[["one", "two", "three"]] one two three a 1.0 1.0 1.0 b NaN 2.0 2.0 c NaN NaN 3.0 d NaN NaN 4.0 

Sé cómo desplazar elementos por columnas hacia arriba / hacia abajo, por ejemplo,

 df.two = df.two.shift(-1) one two three a 1.0 2.0 1.0 b NaN NaN 2.0 c NaN NaN 3.0 d NaN NaN 4.0 

Sin embargo, me gustaría desplazar todos los elementos en la fila a sobre dos columnas y todos los elementos en la fila b sobre una columna. El cuadro de datos final se vería así:

  one two three a NaN NaN 1.0 b NaN NaN 2.0 c NaN NaN 3.0 d NaN NaN 4.0 

¿Cómo se hace esto en los pandas?

Puede transponer el DF inicial de modo que tenga una forma de acceder a las tags de las filas como nombres de columna para realizar la operación de shift .

Cambie el contenido de las columnas respectivas hacia abajo en esas cantidades y vuelva a transponerlo para obtener el resultado deseado.

 df_t = df.T df_t.assign(a=df_t['a'].shift(2), b=df_t['b'].shift(1)).T 

introduzca la descripción de la imagen aquí