Sé que esta es una pregunta muy básica, pero por alguna razón no puedo encontrar una respuesta. ¿Cómo puedo obtener el índice de cierto elemento de una serie en pandas python? (primera aparición sería suficiente)
Es decir, me gustaría algo como:
import pandas as pd
myseries = pd.Series([1,4,0,7,5], index=[0,1,2,3,4])
print myseries.find(7) # should output 3
Ciertamente, es posible definir dicho método con un bucle:
def find(s, el):
for i in s.index:
if s[i] == el:
return i
return None
print find(myseries, 7)
pero supongo que debería haber una mejor manera. ¿Esta ahí?
Convirtiendo a un índice, puede usar
get_loc
Manejo duplicado
Devolverá una matriz booleana si no regresa contigua
Utiliza una tabla hash internamente, tan rápido
Como señala Viktor, hay una sobrecarga de creación única para crear un índice (se incurre cuando realmente HACES algo con el índice, por ejemplo, el
is_unique
)fuente
s.index[_]
Esto funciona si sabes que 7 está allí por adelantado. Puede verificar esto con (myseries == 7) .any ()
Otro enfoque (muy similar a la primera respuesta) que también representa múltiples 7 (o ninguno) es
fuente
any
cheque no es ideal ya que se necesita una doble iteración. Hay un chequeo post operatorio genial que revelará todas lasFalse
condiciones que puedes ver aquí .argmax
aún devolverá 0 (en lugar de error).Estoy impresionado con todas las respuestas aquí. Esta no es una respuesta nueva, solo un intento de resumir los tiempos de todos estos métodos. Consideré el caso de una serie con 25 elementos y asumí el caso general en el que el índice podría contener cualquier valor y desea el valor del índice correspondiente al valor de búsqueda que está hacia el final de la serie.
Aquí están las pruebas de velocidad en un MacBook Pro 2013 en Python 3.7 con Pandas versión 0.25.3.
La respuesta de @ Jeff parece ser la más rápida, aunque no maneja duplicados.
Corrección : Lo siento, me perdí una, la solución de @Alex Spangher usando el método de índice de lista es, con mucho, la más rápida.
Actualización : Se agregó la respuesta de @ EliadL.
Espero que esto ayude.
Es sorprendente que una operación tan simple requiera soluciones tan complicadas y muchas sean tan lentas. Más de medio milisegundo en algunos casos para encontrar un valor en una serie de 25.
fuente
myindex
crearlo, ya que solo necesita crearse una vez?myindex
serie si vas a hacer la búsqueda muchas veces. Para esta prueba supuse que solo se necesitaba una vez y que el tiempo total de ejecución era importante.pd.Index(myseries)
. Para ser justos con los otros métodos, supuse que la serie original podría haber cambiado desde la última búsqueda.Otra forma de hacerlo, aunque igualmente insatisfactorio es:
devuelve: 3
En pruebas de tiempo usando un conjunto de datos actual con el que estoy trabajando (considérelo al azar):
fuente
Si usa numpy, puede obtener una matriz de las indecisiones en las que se encuentra su valor:
Esto devuelve una tupla de un elemento que contiene una matriz de las indencias donde 7 es el valor en myseries:
fuente
puedes usar Series.idxmax ()
fuente
index of certain element
como la pregunta formulada.Otra forma de hacerlo que aún no se ha mencionado es el método tolist:
debería devolver el índice correcto, suponiendo que el valor exista en la Serie.
fuente
A menudo, su valor se produce en múltiples índices:
fuente
Este es el enfoque más nativo y escalable que pude encontrar:
fuente