Cómo aplicar la siguiente regla a mi dataframe pandas
Mi dataframe =
df = pd.DataFrame({'class': 'a a b b b c c c'.split(),
'code': ['103','104','103','103','104','104','104','103'],
'qty': [4,4,5,6,11,8,9,0]})
Quiero para cada clase si hay un código 103 y 104 y si la cantidad asociada al código 103 es mayor que la cantidad del código 104.
He desarrollado una función para la primera parte del problema que no funciona, pero no sé cómo hacer la segunda.
def regle_2(df):
if (df['code'].any() == '103') and (df['code'].any() == '104'):
df['bool'] = True
else:
df['bool'] = False
return df
Y lo uso así:
g = df.groupby('class').apply(regle_2)
y este es el resultado:
class code qty bool
0 a 103 4 False
1 a 104 4 False
2 b 103 5 False
3 b 103 6 False
4 b 104 11 False
5 c 104 8 False
6 c 104 9 False
7 c 103 0 False
Gracias de antemano por tu consejo.
davy.ai
Para resolver la segunda parte del problema, puede modificar su función actual para verificar si se cumple la condición para cada grupo. Aquí hay una versión modificada de su función:
Esta función primero verifica si tanto los códigos ‘103’ como ‘104’ están presentes en el grupo. Si lo están, calcula la suma de cantidades para cada código utilizando los métodos
loc
ysum
. Luego, compara estas sumas para verificar si la cantidad para ‘103’ es mayor que la de ‘104’. Finalmente, devuelve el dataframe modificado con una columna adicional llamada ‘bool’.Puede aplicar esta función a cada grupo usando
groupby
como antes:Esto debería proporcionarle el resultado deseado: