Pandas style.bar 颜色基于条件?

rod*_*ira 3 python pandas pandas-styles

如何渲染 Pandas df,其中列的style.bar.color属性之一是根据某些条件计算的?

例子:

df.style.bar(subset=['before', 'after'], color='#ff781c', vmin=0.0, vmax=1.0)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

#ff781c我不想让两列都用 突出显示,而是希望其中一列 ( df['before']) 保持相同的恒定颜色,而另一列 ( df['after']) 计算为:

def compute_color(row):
   if row['after'] >= row['before']:
      return 'red'
   else:
      return 'green
Run Code Online (Sandbox Code Playgroud)

Sco*_*ton 8

一种方法是使用pd.IndexSlice为 来创建子集df.style.bar

i_pos = pd.IndexSlice[df.loc[(df['after']>df['before'])].index, 'after']
i_neg = pd.IndexSlice[df.loc[~(df['after']>df['before'])].index, 'after']
df.style.bar(subset=['before'], color='#ff781c', vmin=0.0, vmax=1.0)\
  .bar(subset=i_pos, color='green', vmin=0.0, vmax=1.0)\
  .bar(subset=i_neg, color='red', vmin=0.0, vmax=1.0)
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明