Je sais que c'est une question très basique, mais pour une raison quelconque, je ne trouve pas de réponse. Comment puis-je obtenir l'index de certains éléments d'une série dans les pandas python? (la première occurrence suffirait)
Ie, j'aimerais quelque chose comme:
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
Certes, il est possible de définir une telle méthode avec une boucle:
def find(s, el):
for i in s.index:
if s[i] == el:
return i
return None
print find(myseries, 7)
mais je suppose qu'il devrait y avoir un meilleur moyen. Y a-t-il?
Conversion en index, vous pouvez utiliser
get_loc
Gestion des doublons
Renverra un tableau booléen si les retours non contigus
Utilise une table de hachage en interne, si vite
Comme le souligne Viktor, la création d'un index entraîne une surcharge de création unique (elle est encourue lorsque vous faites réellement quelque chose avec l'index, par exemple le
is_unique
)la source
s.index[_]
Cela fonctionne si vous savez que 7 est là à l'avance. Vous pouvez vérifier cela avec (myseries == 7) .any ()
Une autre approche (très similaire à la première réponse) qui tient également compte de plusieurs 7 (ou aucun) est
la source
any
vérification n'est pas idéale car une double itération est nécessaire. Il y a un chouette post-op qui dévoilera toutes lesFalse
conditions que vous pouvez voir ici .argmax
il renverra toujours 0 (au lieu de l'erreur).Je suis impressionné par toutes les réponses ici. Ce n'est pas une nouvelle réponse, juste une tentative de résumer les horaires de toutes ces méthodes. J'ai considéré le cas d'une série de 25 éléments et j'ai assumé le cas général où l'index pourrait contenir n'importe quelle valeur et que vous vouliez la valeur d'index correspondant à la valeur de recherche qui se trouve vers la fin de la série.
Voici les tests de vitesse sur un MacBook Pro 2013 en Python 3.7 avec Pandas version 0.25.3.
La réponse de @ Jeff semble être la plus rapide - bien qu'elle ne gère pas les doublons.
Correction : Désolé, j'en ai manqué une, la solution de @Alex Spangher utilisant la méthode d'index de liste est de loin la plus rapide.
Mettre à jour : Ajout de la réponse de @ EliadL.
J'espère que cela t'aides.
Étonnant qu'une opération aussi simple nécessite des solutions aussi compliquées et que beaucoup soient si lentes. Plus d'une demi-milliseconde dans certains cas pour trouver une valeur dans une série de 25.
la source
myindex
création, car il ne doit être créé qu'une seule fois?myindex
série que si vous allez faire la recherche plusieurs fois. Pour ce test, j'ai supposé qu'il n'était nécessaire qu'une seule fois et que le temps d'exécution total était important.pd.Index(myseries)
. Pour être juste avec les autres méthodes, j'ai supposé que la série originale avait peut-être changé depuis la dernière recherche.Une autre façon de procéder, bien que tout aussi insatisfaisante, est:
renvoie: 3
Sur les tests de temps en utilisant un ensemble de données actuel avec lequel je travaille (considérez-le comme aléatoire):
la source
Si vous utilisez numpy, vous pouvez obtenir un tableau des indécies que votre valeur est trouvée:
Cela retourne un tuple à un élément contenant un tableau des indécies où 7 est la valeur dans myseries:
la source
vous pouvez utiliser Series.idxmax ()
la source
index of certain element
comme la question posée.Une autre façon de le faire qui n'a pas encore été mentionnée est la méthode tolist:
doit renvoyer l'index correct, en supposant que la valeur existe dans la série.
la source
Souvent, votre valeur se produit à plusieurs indices:
la source
C'est l'approche la plus native et la plus évolutive que j'ai pu trouver:
la source