J'ai un Dataframe comme indiqué ci-dessous. Je tiens à numériser par la colonne «KRG» et trouvez la ligne qui correspond à la dernière valeur zéro dans cette colonne et à signaler «SG» de cette ligne (0,03). De plus, j'aimerais signaler "SG" correspondant à la 1ère valeur non nulle de "KRG" (0,04).
Je pourrais réaliser cela à l'aide de la requête () - voir mon code ci-dessous. P>
Sg Krg Krw Pc 0 0.00 0.000000 1.000000 0.000000 1 0.03 0.000000 0.500000 0.091233 2 0.04 0.000518 0.484212 0.093203 3 0.05 0.001624 0.468759 0.095237 4 0.06 0.003171 0.453639 0.097338 5 0.07 0.005098 0.438848 0.099508 6 0.08 0.007367 0.424382 0.101751 7 0.09 0.009953 0.410237 0.104070 8 0.10 0.012835 0.396410 0.106469 9 0.11 0.015999 0.382897 0.108950 10 0.12 0.019431 0.369695 0.111518
3 Réponses :
Pour votre première situation, nous nous assurons que "KRG" est 0 et que la valeur après 0 dans la colonne "KRG" n'est pas 0. pour la deuxième situation, nous Utilisez un processus de pensée similaire à celui ci-dessus, mais assurez-vous que la ligne ci-dessus est 0 à la place et qu'elles ne sont pas toutes les deux 0. P> en utilisant %% TIMEIT, ma version est d'environ 35% plus rapide. p> p>
Merci pour ça. Le seul problème est que la sortie d'origine semble être une valeur alors que votre suggestion génère un fichier de données ou une liste. Y a-t-il un moyen de les signaler uniquement de valeurs? `` `` `1 0.03 Nom: SG, DTYPE: Float64 2 0.04 Nom: SG, DTYPE: Float64` `` `
Vous pouvez ajouter .values code> et vous obtiendrez simplement la valeur unique en tant que tableau NP.
Nous pouvons simplifier cela en utilisant < Code> série.eq code> et sortie p> série.ne code> qui représente égal code> et non égal code>. Nous combinons Dataframe.head Code> et Dataframe.tail code> pour obtenir la première rangée et la dernière rangée.
J'utilise simplement iDXmax et essayez d'accélérer votre message d'origine
s=df.query('Krg != 0')['Krg'].idxmin()# here you only need run idxmax once not twice
print(df.loc[s, 'Sg'])
print(df.loc[s-1, 'Sg'])