2016-12-18 4 views
-1

Ich habe einige Probleme, bedingt Pandas Datenrahmen plotten.Bedingte Daten in Python matplotlib hervorheben

Sagen wir, wir haben einen 4 * 4 Datenrahmen, columns=['A', 'B', 'C', 'D'], indexes=[0, 1, 2, 3]. Nehmen wir an, wir machen eine df.plot.bar(). Und für die Daten in jeder Zeile möchte ich die Balken markieren, wenn Daten in column C >= column A + column B. Machen Sie dasselbe für Daten in Column D.

Das Endergebnis sollte die Balken, die die obige Anforderung erfüllen, in rot markieren, der Rest bleibt weiß.

Weiß jemand wie man es macht?

Antwort

1
df = pd.DataFrame([ 
     [1, 2, 4, 2], 
     [4, 3, 5, 9], 
     [3, 1, 0, 1], 
     [2, 6, 9, 2] 
    ], columns=list('ABCD')) 

condAB = pd.DataFrame(False, df.index, ['A', 'B']) 
condCD = df[['C', 'D']].ge(df[['A', 'B']].sum(1), 0) 
cond = pd.concat([condAB, condCD], axis=1).stack().tolist() 
colors = np.where(cond, 'red', 'white') 

df.plot.bar(color=colors, legend=False) 

enter image description here

+0

Dank piRSquared. Ich denke, dass deine Methode funktioniert, aber ich bemerkte, dass die Nummer 5 in der zweiten Reihe ebenfalls hervorgehoben wurde. Nicht sicher, warum das passiert, aber vielen Dank! – thatMeow

+0

@AlexMeow Ja, das ist seltsam. Ich werde es untersuchen, wenn ich eine Chance bekomme. – piRSquared

+0

Danke Ich schätze deine Zeit. – thatMeow