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
dict
bucle for:EDITAR:
Una demostración para tu
getDF
:fuente
key
tugetDF
? ¿Un solo parámetro o una tupla de claves? sea específico porGender
yYear
deben 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==2014
es más rápida).fuente
query
sintaxis 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
query
inpandas
. Aquí tienes filtrado dedf
resultados por todos loskwargs
parámetros. No olvide agregar algunos validadores (kwargs
filtrado) para obtener la función de filtro por su cuentadf
.fuente
Puede filtrar por varias columnas (más de dos) utilizando el
np.logical_and
operador para reemplazar&
(onp.logical_or
reemplazar|
)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