pd.style.apply 使用多个条件来设置数据框的样式

pd.style.apply using multiple conditions to style a dataframe

my_df = pd.DataFrame({'name': ['John', 'Jorge', 'Igor'], 'rank2020':[2,1,3], 'rank2021':[1,3,2], 'change':[1,-2,1]})

我希望以红色字体设置更改样式,但同时将“+”前缀应用于正值。

要获得红色字体,我可以:

my_df.style.apply(lambda x: np.where(x>0, 'color:red',''), subset='change')

但是,我无法在保留红色字体的同时为正值添加前缀 +。 我当然可以在没有 pd.style 的情况下执行此操作,但在那种情况下我丢失了样式器对象并且只有 '+' 前缀而没有任何红色字体。

我怎样才能同时拥有代表正数和红色字体的“+”?

谢谢

我们可以在上色后链接format

my_df.style.apply(
    lambda x: np.where(x > 0, 'color:red', ''),
    subset='change'
).format('{:+d}', subset='change')

如果需要更复杂的转换,也可以使用 lambda:

my_df.style.apply(
    lambda x: np.where(x > 0, 'color:red', ''),
    subset='change'
).format(
    lambda x: f'+{x}' if x > 0 else x,
    subset='change'
)