Pandas Styling (фон + шрифт) на основе данных String - Есть ли лучший способ? - PullRequest
0 голосов
/ 06 сентября 2018

Могу ли я объединить лямбда-функцию для цвета фона и лямбда-функцию для цвета шрифта в одну функцию 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, показанный ниже:

styled df

1 Ответ

0 голосов
/ 06 сентября 2018

Я бы сделал что-то вроде этого (Python 3.6+ для f-строк):

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