2

I want to color some rows based on 2-3 conditions:

df

    status days_since_claim claim_action
0   Closed         349 days  No action       
1   Closed         353 days  No action           
2  Granted         373 days  Check account           
3  Granted         431 days  Account checked           
4   Closed         448 days  No action

I want to fill the background based on all three columns

i.e.

`backgroud_color: 'green' if 'status' == 'Closed' and claim_action == 'No action'

`backgroud_color: 'red' if 'status' == 'Granted' and claim_action == 'Check account' and 'days_since_claim' > 300`

I tried:

styled = mdf.style.applymap(lambda v: 'background-color: %s' %
                                      'red' if v > 300 else "")
def color_s(df):
    for i, row in df.iterrows():
        if row['status'] == 'Closed':
                 .
                 .

I don't think I am able to grasp the concept of how styling works. Can someone explain a bit with example?

Thanks in advance.

1 Answer 1

5

You can create DataFrame of styles with Styler.apply and set rows by conditions with loc:

def color(x):
    c1 = 'background-color: green'
    c2 = 'background-color: red'
    c = '' 
    #compare columns
    mask1 = (x['status'] == 'Closed') & 
            (x['claim_action'] == 'No action')
    mask2 = (x['status'] == 'Granted') & 
            (x['claim_action'] == 'Check account') & 
            (x['days_since_claim'].dt.days > 300)
    #DataFrame with same index and columns names as original filled empty strings
    df1 =  pd.DataFrame(c, index=x.index, columns=x.columns)
    #modify values of df1 column by boolean mask
    df1.loc[mask1, :] = c1
    df1.loc[mask2, :] = c2
    return df1

df.style.apply(color, axis=None)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.