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'
)
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'
)