如何根据列名和单元格值设置样式?

时间:2020-02-02 12:27:51

标签: python pandas

我需要用红色突出显示某些负值,某些列使用绿色。 (在column_colors词典中)

如何在applymap函数中获取列名?

return df.style.applymap(
    lambda val: column_colors[???]['negative_cell'] if val < 0 else column_colors[???]['positive_cell'],
    subset=pd.IndexSlice[:, column_colors_keys])

这是字典:

  "column_colors": {
    "a": {
       "positive_cell": "color:red;",
       "negative_cell": "color:green;"
    },
    "b":{
       "positive_cell": "color:green;",
       "negative_cell": "color:red;"
    }
  },

2 个答案:

答案 0 :(得分:2)

style.applymap是逐元素应用的,因此没有一种简单的方法来检索“当前”列名。

如果您使用style.apply(默认情况下按列应用),则使用.name属性获取“当前”列名称很简单:

column_colors = {
    "a": {
        "positive_cell": "color:red;",
        "negative_cell": "color:green;"
    },
    "b": {
        "positive_cell": "color:green;",
        "negative_cell": "color:red;"
    }
}

def apply_style(column):
    col_data = column_colors[column.name]
    return [col_data['positive_cell'] if val > 0 else col_data['negative_cell']
            for val in column]

df.style.apply(apply_style)

enter image description here

答案 1 :(得分:1)

我正在使用字典的数据框来为np.where设置样式

m = pd.DataFrame(column_colors) #creates a dataframe from column_colors dict
def myf(x):
    val = np.where(x>0 ,m.loc['positive_cell'], m.loc['negative_cell'])
    return pd.DataFrame(val,columns=x.columns,index=df.index)
df.style.apply(myf,axis=None,subset=[*column_colors.keys()])

enter image description here