【问题标题】:Pandas Style conditional formatting (highlight) on text文本上的 Pandas 样式条件格式(突出显示)
【发布时间】:2021-07-17 08:36:25
【问题描述】:

我正在尝试根据文本突出显示 pandas 中的单个整个单元格。例如,如果推荐是“卖出”,我想用红色和绿色突出显示“买入”。感谢是否有人可以指导我。

def color_negative_red(value):
    if value < 0:
        color = 'red'
    elif value > 0:
        color = 'green'
    else:
        color = 'black'
    return 'color: %s' % color

import pandas as pd

data = {'Stock': ['TSLA','GM','GOOG','MMM'],
        'Diff': [-200,-50,150,50],
        'Recommend' : ['SELL','SELL','BUY','BUY']
        }

df = pd.DataFrame(data, columns = ['Stock', 'Diff', 'Recommend'])

df.style.applymap(color_negative_red, subset=['Diff'])

### how to get a conditional highlight based on 'Recommend' ?????

【问题讨论】:

    标签: python pandas formatting pandas-styles


    【解决方案1】:

    样式可以链接在一起。有很多方法可以解决这个问题,假设 'BUY' 和 'SELL' 是唯一的选项np.where + apply 是一个不错的选择:

    def color_recommend(s):
        return np.where(s.eq('SELL'),
                        'background-color: red',
                        'background-color: green')
    
    (
        df.style.applymap(color_negative_red, subset=['Diff'])
            .apply(color_recommend, subset=['Recommend'])
    )
    

    或者以类似于color_negative_red的方式:

    def color_recommend(value):
        if value == 'SELL':
            color = 'red'
        elif value == 'BUY':
            color = 'green'
        else:
            return
        return f'background-color: {color}'
    
    
    (
        df.style.applymap(color_negative_red, subset=['Diff'])
            .applymap(color_recommend, subset=['Recommend'])
    )
    

    【讨论】:

      【解决方案2】:

      你快到了!

      def color_negative_red(value):
          if value < 0:
              color = 'pink'
          elif value > 0:
              color = 'lightgreen'
          else:
              color = 'white'
          return 'background-color: %s' % color
      
      import pandas as pd
      
      data = {'Stock': ['TSLA','GM','GOOG','MMM'],
              'Diff': [-200,-50,150,50],
              'Recommend' : ['SELL','SELL','BUY','BUY']
              }
      
      df = pd.DataFrame(data, columns = ['Stock', 'Diff', 'Recommend'])
      
      df.style.applymap(color_negative_red, subset=['Diff'])
      

      唯一需要改变的是颜色需要变成背景色:return 'background-color: %s' % color

      如果您想突出显示整行,请尝试:

      def color_negative_red(row):
          print(row)
          value = row.loc["Diff"]
          if value < 0:
              color = 'pink'
          elif value > 0:
              color = 'lightgreen'
          else:
              color = 'black'
          return ['background-color: %s' % color for r in row]
      
      import pandas as pd
      
      data = {'Stock': ['TSLA','GM','GOOG','MMM'],
              'Diff': [-200,-50,150,50],
              'Recommend' : ['SELL','SELL','BUY','BUY']
              }
      
      df = pd.DataFrame(data, columns = ['Stock', 'Diff', 'Recommend'])
      
      df.style.apply(color_negative_red, axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-24
        • 2020-09-29
        • 1970-01-01
        • 2018-05-02
        相关资源
        最近更新 更多