使用字典(Pandas)有条件地格式化列

时间:2021-04-14 16:23:44

标签: python pandas lambda colors

我已经搜索了论坛,但仍在为此苦苦挣扎。

假设我有一个以 html 颜色作为值的键字典,即:

colours = {'a': '#2DB2EC',
           'b': '#A71AB7',
           'c': '#EB4141',
           'd': '#EB4141',
           'e': '#36D22C',
           'f': '#2C4ED2',
           'g': '#137C15',
           'h': '#F4EA06'}

我还有一个包含两列的数据框,其中一列 (col1) 对应于我的“颜色”字典中的键:

col1     col2
a        900
d        1000
h        800
z        750
m        100
l        50

我如何使用 Pandas style.applymap 根据第一列的字典值对第二列进行颜色编码(如果没有找到值,则将其留空/白色)?我一直在玩一些 lambda 函数,但我真的很难让任何东西工作。

抱歉,这是一个基本问题,并提前致谢。

2 个答案:

答案 0 :(得分:1)

尝试:

df.style.apply(lambda r: [f"background-color:{colours.get(r['col1'],'')}"]*len(r), axis=1)

输出:

enter image description here

答案 1 :(得分:1)

<块引用>

根据第一列的字典值对第二列进行颜色编码(如果没有找到值,则将其留空/白色)

您也可以尝试 series.map,然后在完成后为 col1 分配空白颜色。

def col_fun(df_c):
    df_c = df_c.copy()
    df_c['col2'] = df_c['col1'].map(colours).fillna('').radd("background-color:")
    df_c['col1'] = 'background-color:'
    return df_c
df.style.apply(col_fun,axis=None)
#or if you have more cols: df.style.apply(col_fun,axis=None,subset=['col1','col2'])

enter image description here