Selección de filas en un DataFrame pandas en las que un campo toma ciertos valores

Carguemos, antes de nada, el dataset Titanic proveído por la librería seaborn:

titanic = sns.load_dataset("titanic")
titanic.head()

Dataset Titanic

Echemos un vistazo a los valores que toma el campo embark_town:

titanic.embark_town.unique()

array(['Southampton', 'Cherbourg', 'Queenstown', nan], dtype=object)

Seleccionar aquellas filas en las que campo toma un cierto valor es sencillo. Por ejemplo, para seleccionar aquellas en las que el puerto de embarque es Cherbourg basta hacer lo siguiente:

selection = titanic[titanic.embark_town == "Cherbourg"]
selection.head()

Pasajeros que embarcaron en Cherbourg

Si quisiéramos seleccionar las filas en las que el campo en cuestión, embark_town, toma el valor Cherbourg o el valor Queenstown, ya no es tan obvio. La primera opción a la que podemos recurrir es incluir ambas condiciones uniéndolas el operador "o lógico":

selection = titanic[(titanic.embark_town == "Cherbourg") | (titanic.embark_town == "Queenstown")]
selection.head()

Pasajeros que embarcaron en Cherbourg o en Queenstown

El resultado es el esperado siempre que usamos el operador | (el operador or devuelve un error).

En todo caso, si la lista de condiciones es larga, la mejor opción es usar el operador de pertenencia isin (en el siguiente ejemplo solo se aplica a dos opciones, pero podría ser cualquier número de ellas):

towns = ['Cherbourg', 'Queenstown']
selection = titanic[titanic.embark_town.isin(towns)]
selection.head()

Pasajeros que embarcaron en Cherbourg o en Queenstown

 

Categoría
Submitted by admin on Thu, 03/28/2019 - 16:52