pandas – obtener el valor desplazado en una función apply
En un DataFrame tengo dos columnas A y B.
Me gustaría agregar una nueva columna que contenga un nuevo valor calculado en función de la fila actual y anterior de las columnas A y B.
Mi primer enfoque fue usar la función apply:
def calc_C(A,B):
if A.shift() > A:
C = B + B.shift(1)...
else:
C = ..
return C
df["C"] = df.apply(lambda x: calc<em>C(x["A"],x["B"]),axis=1)
Pero no puedo acceder a la función shift
porque esos parámetros son objetos float64.
También intenté otra forma, pero ahora en una declaración if
intenta comparar toda la serie:
def calc_C(df):
if df["A"] > df["A"].shift():
C= df["B"] + df["B"].shift()
else:
C = ..
return C
df["C"] = calc_C(df)
¿Cómo puedo hacer esto de manera pandas y pythonica sin copiar el conjunto de datos y crear nuevas columnas temporales?
davy.ai
Puede usar la función
shift()
dentro deapply()
haciendo referencia al objeto DataFrame dentro de la función. Aquí hay una versión actualizada de su funcióncalc_C()
que debería funcionar:En esta versión,
apply()
pasa cada fila del DataFrame acalc_C()
como un objeto Series, y las columnasA_shifted
yB_shifted
se crean usandoshift()
fuera de la función. El argumentoinplace=True
dentro dedrop()
elimina las columnas temporalesA_shifted
yB_shifted
después de que se usan para calcular la columnaC
.