Pandas 基于字符串数据的样式(背景+字体)——有更好的方法吗?

Pandas Styling (background + font) based on String data - Is there a better way?

我可以将用于背景颜色的 lambda 函数和用于字体颜色的 lambda 函数组合成一个 lamdba 函数吗?这将用于具有大量不同样式的非常大的数据框,因此最好将代码减少一半。

欢迎提出任何其他更好的建议

# raw data
df = pd.DataFrame({'Name':['name1', 'name2', 'name3', 'name1', 'name2', 'name3', 'name1', 'name2', 'name3' ],  
                   'Rotation':['ER','PEDI','MAM','PEDI', 'ERJD','PEDI','JMAM','ERSN','ABD']})

#style
df = df.style.apply(lambda x: ["background-color: green" if 'ER' in v else "" for v in x], axis = 1)\
             .apply(lambda x: ["color: orange" if 'ER' in v else "" for v in x], axis = 1)\
             .apply(lambda x: ["background-color: red" if 'MAM' in v else "" for v in x], axis = 1)\
             .apply(lambda x: ["color: yellow" if 'MAM' in v else "" for v in x], axis = 1)

结果 df 如下所示:

我会做这样的事情(Python 3.6+ for f-strings):

def where(x):
  bg = ['green', 'red']
  fg = ['orange', 'yellow']
  ls = ['ER', 'MAM']
  for i, y in enumerate(ls):
    if y in x:
      return f"background-color: {bg[i]}; color: {fg[i]}"
  return ''

df.style.applymap(where)