基于多个条件的大熊猫样式?

时间:2020-01-31 12:52:13

标签: python pandas

我想根据2-3种情况为行添加颜色:

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

我想基于所有三列填充背景

`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':
                 .
                 .

我认为我无法掌握样式工作原理的概念。有人可以举例说明吗?

先谢谢了。

1 个答案:

答案 0 :(得分:2)

您可以使用Styler.apply创建样式的DataFrame,并使用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)