I am trying to color, highlight, or change fond of Python pandas DataFrame based on the value of the cell. e.g. if the cells on each rows are bigger than the cell in the first column of that row, then highlight the cell as red (or any other color), otherwise leave it as it is.
I wrote a for loop here:
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"
So far I haven't found a way to do it. Any help will be great.
One way to conditionally format your Pandas DataFrame is to highlight cells which meet certain conditions. To do so, we can write a simple function and pass that function into the Styler object using . apply() or .
You can use some of their built-in functions like background_gradient or bar to replicate excel-like features like conditional formatting and data bars. You can also format cells to display percentages, floats, ints, etc. without changing the original dataframe. and call it on my Styler object, i.e., df.
From the style docs:
You can apply conditional formatting, the visual styling of a DataFrame depending on the data within, by using the DataFrame.style property.
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)
Edit: to format specific cells, you can add condition checkers to check the name of element with Series.iteritems()
or check the index with enumerate()
, e.g. if you want to format starting from column 3, you can use enumerate and check the 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)
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 '')
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With