Accede al valor anterior en la misma columna DataFrame

Aquí está mi código:

a = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]], columns=['A', 'B']) print(a) a['C'] = 1 # or np.nan or is there a way to avoid this? b = lambda i : i['A'] + i['B'] + i['C'] # actually what is needed if to access a previous element, like i['C'].shift() a['C'] = a.apply(b, axis=1) print(a) 

Lo cual funciona bien, pero en la lambda, quiero acceder a i['C'].shift(1) pero obtengo la siguiente excepción si lo uso de esta manera;

 Traceback (most recent call last): File "C:\Users\Development\workspace\TestPython\TestPython.py", line 31, in  a['C'] = a.apply(b, axis=1) File "C:\Program Files\Python36\lib\site-packages\pandas\core\frame.py", line 4262, in apply ignore_failures=ignore_failures) File "C:\Program Files\Python36\lib\site-packages\pandas\core\frame.py", line 4358, in _apply_standard results[i] = func(v) File "C:\Users\Development\workspace\TestPython\TestPython.py", line 29, in  b = lambda i : i['A'] + i['B'] + i['C'].shift() # actually what is needed if to access a previous element, like i['C'].shift() AttributeError: ("'numpy.int64' object has no attribute 'shift'", 'occurred at index 0') 

Y también quiero evitar inicializar a['C'] = 1 , si es posible, lo que significa que una [‘C’] es una nueva columna que se agrega en esta operación.

¿Alguna sugerencia o forma alternativa de lograr esto?

Supongo que necesitas esto:

 a['C'] = a['A'] + a['B'] a['D'] = a['C'].cumsum() 

porque sumr con el elemento anterior es una sum acumulativa.

De su código:

 # Variable a BEFORE apply AB 0 1 2 1 3 4 2 5 6 3 7 8 4 9 10 # Variable a AFTER apply ABC 0 1 2 4 1 3 4 8 2 5 6 12 3 7 8 16 4 9 10 20 

Suponiendo que esta salida es realmente lo que quieres, entonces:

 a = pd.DataFrame([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]], columns=['A', 'B']) a['C'] = a['A'] + a['B'] + 1 

Estoy un poco confundido en cuanto a por qué querría acceder a a['C'].shift(1) ya que todos los valores son los mismos de todos modos, y está intentando no inicializarlo.

Si desea un ejemplo df.shift(n) de uso de df.shift(n) , intente:

 a['Shift'] = a['A'] + a['B'].shift(1) 

Lo que te daría:

  ABC Shift 0 1 2 4 NaN 1 3 4 8 5.0 2 5 6 12 9.0 3 7 8 16 13.0 4 9 10 20 17.0 

Esto le daría A (i) + B (i + 1), donde i es el número de fila. Como has desplazado la columna B en 1, la primera sum es NaN .