2 votes

si conditions avec un cadre de données panda python et tracer avec matplotlib

J'aimerais utiliser une sorte de condition "if" pour que le tracé ne soit effectué que si la valeur d'une colonne spécifique atteint une certaine valeur.

Disons que dans l'exemple ci-dessous, je voudrais que le graphique ne soit établi que si la valeur du cycle == 2.

import pandas as pd
import matplotlib.pyplot as plt 

data = [('cycle',[1,1,2,2,3,3,4,4]),
         ('A',[0.1,0.5,0.2,0.6,0.15,0.43,0.13,0.59]),
         ('B',[ 500, 600, 510,580,512,575,499,598]),
         ]
df = pd.DataFrame.from_items(data)
#print(df)
x = df['A']
y = df['B']

if df['cycle']==2:
    plt.plot(x,y)

Si j'essaie de le faire, j'obtiens l'erreur suivante : ValueError : La valeur de vérité d'une série est ambiguë. Utilisez a.empty, a.bool(), a.item(), a.any() ou a.all().

Jusqu'à présent, je n'ai pas réussi à trouver un moyen de résoudre ce problème.

Je suis reconnaissant pour toute aide concernant ce problème. Je vous souhaite une très bonne journée.

2voto

johnchase Points 3783

Dans cette ligne if df['cycle']==2 le site df['cycle'] retourne une série de pandas. Lorsque vous comparez cela à 2 pandas ne sait pas si vous voulez comparer par élément, ou la série entière, c'est ambigu. Ce que vous pouvez faire à la place, c'est filtrer le tableau en fonction de votre condition, ou filtrer les séries individuelles. Par exemple :

df = pd.DataFrame.from_items(data)
#print(df)
x = df.loc[df['cycle'] == 2, 'A']
y = df.loc[df['cycle'] == 2, 'B']

plt.plot(x,y)

Ici, vous utilisez le df['cycle'] comme une série booléenne pour indexer dans le cadre de données original et retourner seulement les éléments où cycle est égal à 2

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X