2016-12-17 4 views
1

Ich versuche, Python Pandas DataFrame basierend auf dem Wert der Zelle zu färben, hervorzuheben oder zu ändern. z.B. Wenn die Zellen in jeder Zeile größer als die Zelle in der ersten Spalte dieser Zeile sind, markieren Sie die Zelle als rot (oder eine andere Farbe), andernfalls lassen Sie sie unverändert.Bedingte Format Python pandas Zelle

Ich schrieb eine for-Schleife hier:

for index in range(0, df.shape[0]): 
    for column in range(1, df.shape[1]): # from 1 not from 0 because I only need # to compare the 2nd to the last cell of each row with the 1st cell in the row 

     if df.iloc[index][column] - df_BDE_n_months_avg_std_pct.iloc[index][0] > 0: 
      then "PLEASE PUT YOUR HELP HERE, I NEED A PIECE OF CODE THAT CAN HIGHLIGHT THE CELL" 
     else: 
      "DO NOTHING" 

Bisher habe ich keine Möglichkeit, es zu tun gefunden. Jede Hilfe wird großartig sein.

Antwort

3

Von the style docs:

können Sie die bedingte Formatierung anwenden, um das visuelle Styling eines Datenrahmen in Abhängigkeit von den Daten innerhalb, indem die DataFrame.style Eigenschaft.

import pandas as pd 
df = pd.DataFrame([[2,3,1], [3,2,2], [2,4,4]], columns=list("ABC")) 

df.style.apply(lambda x: ["background: red" if v > x.iloc[0] else "" for v in x], axis = 1) 

enter image description here


bearbeiten: spezifische Zellen zu formatieren, können Sie Bedingung Kontrolleure fügen Sie den Namen des Elements mit der Series.iteritems() oder überprüfen Sie den Index mit enumerate() zu überprüfen, zum Beispiel wenn Sie von Spalte beginnen zu forma 3 können Sie enumerate verwenden und überprüfen Sie den Index:

df = pd.DataFrame([[2,3,-3], [3,2,7], [2,4,4]], columns=list("ABC")) 

df.style.apply(lambda x: ["background-color: #ff33aa" 
          if (i >= 2 and (v > x.iloc[0] + x.iloc[1] 
              or v < x.iloc[0] - x.iloc[1])) 
          else "" for i, v in enumerate(x)], axis = 1) 

enter image description here

+0

Dank Psidom! Deine Lösung ist großartig! Eine Zusatzfrage, also was, wenn ich die Regel wie für jede Reihe einstellen möchte, von der 3. Zelle x, wenn x> 1. Zelle + 2. Zelle, oder x <1. Zelle - 2. Zelle, dann markieren, ansonsten nichts tun? Ich denke, der Punkt hier ist, wie wähle ich den Bereich der Zellen, die ich vergleichen möchte? Ihre Methode hat automatisch die erste Zelle selbst ausgeschlossen, da sie nicht größer als sie selbst ist, aber sie wird etwas komplizierter, wenn andere Regeln gelten. – thatMeow

+0

Sie können jede Zeile "aufzählen" und den Index überprüfen, nur die Zelle ändern, wenn der Index in Ihrem Fall *> = 2 * ist. Siehe das Update. – Psidom

+0

Danke nochmal Psidom. Ich habe noch nicht viel mit Pandas gespielt und deine Vorschläge sind von unschätzbarem Wert. Ich schätze deine Zeit :) – thatMeow

Verwandte Themen