web-dev-qa-db-fra.com

Format conditionnel Python pandas cell

J'essaie de colorer, de mettre en surbrillance ou de changer d'affection pour Python pandas DataFrame basé sur la valeur de la cellule. Par exemple, si les cellules de chaque ligne sont plus grandes) que la cellule dans la première colonne de cette ligne, puis mettez en surbrillance la cellule en rouge (ou toute autre couleur), sinon laissez-la telle quelle.

J'ai écrit une boucle for ici:

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"

Jusqu'à présent, je n'ai pas trouvé de moyen de le faire. Toute aide sera appréciée.

7
thatMeow

De les docs de style:

Vous pouvez appliquer une mise en forme conditionnelle, le style visuel d'un DataFrame en fonction des données qu'il contient, en utilisant la propriété DataFrame.style.

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


Modifier : pour formater des cellules spécifiques, vous pouvez ajouter des vérificateurs de conditions pour vérifier le nom de l'élément avec Series.iteritems() ou vérifier l'index avec enumerate(), par exemple si vous souhaitez formater à partir de la colonne 3, vous pouvez utiliser énumérer et vérifier l'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

15
Psidom
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.Rand(4,3))
df.style.applymap(lambda x: 'background-color : yellow' if x>df.iloc[0,0] else '')

df

4
Zoe L