Para filtrar un marco de datos (df) por una sola columna, si consideramos los datos con hombres y mujeres, podríamos:
males = df[df[Gender]=='Male']
Pregunta 1: ¿Pero qué pasa si los datos abarcan varios años y solo quisiera ver hombres en 2014?
En otros idiomas, podría hacer algo como:
if A = "Male" and if B = "2014" then
(excepto que quiero hacer esto y obtener un subconjunto del marco de datos original en un nuevo objeto de marco de datos)
Pregunta 2. ¿Cómo hago esto en un bucle y creo un objeto de marco de datos para cada conjunto único de año y género (es decir, un df para: 2013-Masculino, 2013-Femenino, 2014-Masculino y 2014-Femenino
for y in year:
for g in gender:
df = .....

groupby.Respuestas:
Usando el
&operador, no olvide envolver las sub-declaraciones con():Para almacenar sus marcos de datos en un
dictbucle for:EDITAR:
Una demostración para tu
getDF:fuente
keytugetDF? ¿Un solo parámetro o una tupla de claves? sea específico porGenderyYeardeben ser cadenas, es decir,'Gender'y'Year'.Para funciones booleanas más generales que le gustaría usar como filtro y que dependen de más de una columna, puede usar:
donde f es una función que se aplica a cada par de elementos (x1, x2) de col_1 y col_2 y devuelve Verdadero o Falso dependiendo de cualquier condición que desee en (x1, x2).
fuente
Comience desde pandas 0.13 , esta es la forma más eficiente.
fuente
En caso de que alguien se pregunte cuál es la forma más rápida de filtrar (la respuesta aceptada o la de @redreamality):
Resultados de 100.000 filas:
Resultados para 10,000,000 filas:
Entonces, los resultados dependen del tamaño y los datos. En mi computadora portátil, se
query()vuelve más rápido después de 500k filas. Además, la búsqueda de cadenasYear=="2014"tiene una sobrecarga innecesaria (Year==2014es más rápida).fuente
querysintaxis es más ordenada y cercana a SQL, lo que la hace agradable para los datos desde entonces. Lo bueno del pastel es que es más rápido con muchas filas :)Puede crear su propia función de filtro usando
queryinpandas. Aquí tienes filtrado dedfresultados por todos loskwargsparámetros. No olvide agregar algunos validadores (kwargsfiltrado) para obtener la función de filtro por su cuentadf.fuente
Puede filtrar por varias columnas (más de dos) utilizando el
np.logical_andoperador para reemplazar&(onp.logical_orreemplazar|)Aquí hay una función de ejemplo que hace el trabajo, si proporciona valores de destino para varios campos. Puede adaptarlo para diferentes tipos de filtrado y demás:
Uso:
fuente