Estoy tratando de extraer una serie que cumple con múltiples condiciones en Pandas, es decir, usando un operador booleano para filtrar los datos, basado en pregunta / respuesta aquí, pero necesito usar la notación de columna entre corchetes. (Python 3.7)

Esto funciona y devuelve [índice, booleano]:

mySeries = data['myCol'] == 'A'

Ambos devuelven errores:

mySeries = (data['rank'] == 'A' or data['rank'] == 'B')
mySeries = (data['rank'] == 'A' | data['rank'] == 'B')

El segundo devuelve ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). Las respuestas en esta pregunta parece abordar este error para un marco de datos, no para una serie. El segundo intento devuelve este error: TypeError: Cannot perform 'ror_' with a dtyped [object] array and scalar of type [bool]

Estoy usando la notación de corchetes df['rank'] en lugar de la notación de puntos df.rank porque en la notación de puntos, Pandas confunde el nombre de la columna con método de clasificación.

0
a11 9 feb. 2021 a las 06:03

2 respuestas

La mejor respuesta

Según la respuesta de @unutbu aquí, esta es la notación correcta , el problema era que cada condición debía estar entre paréntesis:

mySeries = (data['rank'] == 'A') | (data['rank'] == 'B')
0
a11 9 feb. 2021 a las 03:09

Podemos hacer isin

mySeries = (data['rank'].isin(['A','B'])
1
BENY 9 feb. 2021 a las 04:01