Comment obtenir tous les enregistrements (après la valeur minimale)
ex: la valeur minimale est 7, je veux obtenir tous les enregistrements après.
min1=dfs[i].loc[dfs[i]['Value'] == dfs[i]['Value'].min()]['Date'].values[0] dfs[i][min1:]
J'ai essayé
Date Value 2020-03-11 20 2020-02-25 10 2020-02-20 7.5 2020-02-15 7 2020-01-10 10 2019-12-07 15
mais cela a généré une erreur 'TypeError: impossible de faire une indexation de tranche avec ces indexeurs [2020-02-12T00: 00: 00.000000000] de'
Remarque: j'ai une liste de blocs de données.
3 Réponses :
Vous voulez utiliser shift
pour obtenir la série décalée, puis comparez cela avec min
:
4 10.0 Name: Value, dtype: float64
Sortie: p >
df.loc[df.Value.shift()==df.Value.min(), 'Value']
Si vous voulez juste obtenir Valeur
:
Date Value 4 2020-01-10 10.0
Sortie:
df[df.Value.shift()==df.Value.min()]
Vous pouvez obtenir toutes les lignes après le premier minimum en procédant ainsi
df.loc [df ['Value']. idxmin () :,]
EDIT: Basé sur le commentaire ci-dessous pour obtenir des lignes après le minimum, sans inclure le minimum df.loc [df ['Value']. idxmin () + 1 :,]
p >
Veuillez noter que je suppose que l'index est un entier continu, sinon veuillez réinitialiser l'index. Si votre index n'est pas entier et non monotone, veuillez vérifier la réponse @Valdi_Bo ci-dessous
Cette expression récupère les lignes à partir de la ligne "minimale", alors que l'OP veut des lignes après cette ligne.
Merci beaucoup, c'est exactement ce que je cherchais.
Supposons que le DataFrame contienne:
df.loc[df.Value.shift().idxmin():]
Pour prouver que ma méthode fonctionne dans tous les cas possibles, j'ai délibérément a choisi un index non numérique et non monotone, mais l'index doit être unique.
Notez que:
idxm = df.Value.idxmin ()
obtient l'index de la ligne avec un minimum
Valeur - C4
.
df.loc [: idxm] .index
récupère la partie "initiale" de l'index,
jusqu'à la ligne "minimale" (y compris) -
Index (['A1', 'H2', 'E3', 'C4'], dtype = 'object')
.
df.index.difference (df.loc [: idxm] .index)
récupère l'autre partie
de l'index - Index (['B5', 'M6'], dtype = 'object')
.
Cela conduit donc à la conclusion que la bonne expression est:
Date Value B5 2020-01-10 10.0 M6 2019-12-07 15.0
Le résultat de cette expression est:
df.loc[df.index.difference(df.loc[:idxm].index)]
Merci beaucoup, cela m'a aidé à trouver la solution. J'ai fait un petit changement `df.loc [df.index.difference (df.loc [idxm:]. Index)]` donc j'obtiens A1, H2 et E3.
df.loc [[df ['value']. idxmin ()] :,]
Cela devrait vous donner toutes les valeurs après le minimumImpossible de modifier le commentaire précédent, donc publier à nouveau la réponse après avoir corrigé le crochet supplémentaire ici
df.loc [df ['value']. Idxmin () :,]