Estoy tratando de hacer una indexación booleana con un par de condiciones usando Pandas. Mi DataFrame original se llama df . Si realizo lo siguiente, obtengo el resultado esperado:
temp = df[df["bin"] == 3] temp = temp[(~temp["Def"])] temp = temp[temp["days since"] > 7] temp.head()Sin embargo, si hago esto (que creo que debería ser equivalente), no obtengo filas:
temp2 = df[df["bin"] == 3] temp2 = temp2[~temp2["Def"] & temp2["days since"] > 7] temp2.head()¿Alguna idea de qué explica la diferencia?
Use () porquela precedencia del operador :
temp2 = df[~df["Def"] & (df["days since"] > 7) & (df["bin"] == 3)]Alternativamente, cree condiciones en filas separadas:
cond1 = df["bin"] == 3 cond2 = df["days since"] > 7 cond3 = ~df["Def"] temp2 = df[cond1 & cond2 & cond3]Muestra :
df = pd.DataFrame({'Def':[True] *2 + [False]*4, 'days since':[7,8,9,14,2,13], 'bin':[1,3,5,3,3,3]}) print (df) Def bin days since 0 True 1 7 1 True 3 8 2 False 5 9 3 False 3 14 4 False 3 2 5 False 3 13 temp2 = df[~df["Def"] & (df["days since"] > 7) & (df["bin"] == 3)] print (temp2) Def bin days since 3 False 3 14 5 False 3 13O
df_train[(df_train["fold"]==1) | (df_train["fold"]==2)]Y
df_train[(df_train["fold"]==1) & (df_train["fold"]==2)]