【问题标题】:Conditionally formatting a column using a dictionary (Pandas)使用字典有条件地格式化列(熊猫)
【发布时间】:2021-07-09 17:26:25
【问题描述】:

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

假设我有一个以 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 函数,但在让任何东西工作时都遇到了困难。

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

【问题讨论】:

    标签: python pandas lambda colors


    【解决方案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'])
    

    【讨论】:

    • 谢谢-我认为这是可行的,因为当我分解它时,我可以看到 df_c 已将正确的“背景颜色”映射到每个数据框单元格,但是当我将其应用回原始数据框时原来的类型变成'io.formats.style.Styler',我无法通过我的变量资源管理器(Spyder)查看它。我错过了什么吗?
    • @SlowlyLearning 看看这个,你可以试试 Jupyter notebook :stackoverflow.com/questions/58116600/…stackoverflow.com/questions/55660958/…
    【解决方案2】:

    尝试:

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

    输出:

    【讨论】:

    • 谢谢 - 我不确定我的 'f' 字符串是否正常工作,因为当我使用您的代码时,它会将方括号内的所有内容显示为字符串,除了 f 本身。 .
    猜你喜欢
    • 2020-02-09
    • 2017-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2018-03-28
    • 2016-09-22
    • 1970-01-01
    相关资源
    最近更新 更多