python - Los pandas seleccionan filas y columnas según la condición booleana
dataframe conditional (1)
Tengo un marco de datos de pandas con aproximadamente 50 columnas y> 100 filas.
Quiero seleccionar las columnas
''col_x''
,
''col_y''
donde
''col_z'' < m
.
¿Hay una manera simple de hacer esto, similar a
df[df[''col3''] < m]
y
df[[''colx'',''coly'']]
pero combinados?
Analicemos tu problema. Tú quieres
- Filtrar filas según alguna condición booleana
- Desea seleccionar un subconjunto de columnas del resultado.
Para el primer punto, la condición que necesitaría es:
df["col_z"] < m
Para el segundo requisito, desearía especificar la lista de columnas que necesita:
["col_x", "col_y"]
¿Cómo combinarías estos dos para producir un resultado esperado con pandas?
La forma más sencilla es usar
loc
-
df.loc[df["col_z"] < m, ["col_x", "col_y"]]
El primer argumento selecciona filas y el segundo argumento selecciona columnas.
Más acerca de
loc
Piense en esto en términos de las operaciones de álgebra relacional: selección y proyección . Si eres del mundo SQL, este sería un equivalente relacionado. La operación anterior, en sintaxis SQL, se vería así:
SELECT col_x, col_y # projection on columns
FROM df
WHERE col_z < m # selection on rows
pandas
loc le permite especificar etiquetas de índice para seleccionar filas.
Por ejemplo, si tiene un marco de datos:
col_x col_y
a 1 4
b 2 5
c 3 6
Para seleccionar el índice
a
,
c
, y
col_x
:
df.loc[[''a'', ''c''], [''col_x'']]
col_x
a 1
c 3
Alternativamente, para seleccionar por una condición booleana (usando una serie / matriz de valores
bool
, como lo hace su pregunta original), donde todos los valores en
col_x
son impares -
df.loc[(df.col_x % 2).ne(0), [''col_y'']]
col_y
a 4
c 6
Para más detalles,
df.col_x % 2
calcula el módulo de cada valor con respecto a
2
.
El
ne(0)
luego comparará el valor con
0
y devolverá
True
si no lo está (todos los números impares se seleccionan así).
Esto es lo que da como resultado esa expresión:
(df.col_x % 2).ne(0)
a True
b False
c True
Name: col_x, dtype: bool
Otras lecturas