есть pandas dataframe, надо найти максимум в каждой строке и изменить цвет этой ячейки
есть dataframe типа
| index | P | x1 | x2 | x3 |
|---|---|---|---|---|
| A | 1 | 2 | 4 | 5 |
| B | 2 | 1 | 3 | 6 |
| C | 0 | 2 | 0 | 7 |
мне надо найти максимум по каждой строке в столбцах x1 x2 и x3 и выделить его цветом.
накодил такое:
s2 = _df_Velu.style
def highlight_max(s, props=''):
return np.where(s == np.nanmax(s.values), props, '')
s2.apply(highlight_max, props='color:white;background-color:green;', axis=1)
s2
но это ломает датафрейм и максимум ищет по всей строке, а надо по определенным столбцам
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Воспользуйтесь параметром subset.
Пример:
idx = pd.IndexSlice
slice_ = idx[:, "x1":"x3"]
df.style.apply(highlight_max, props='color:white;background-color:green;', axis=1, subset=slice_)
Автор решения: SergFSM
→ Ссылка
пример решения вашей задачи есть в документации pandas здесь. Это оттуда:
def highlight_max(x, color):
return np.where(x == np.nanmax(x.to_numpy()), f"color: {color};", None)
df = pd.DataFrame(np.random.randn(5, 3), columns=['P',"A", "B"])
df.style.apply(highlight_max, color='blue', axis=1, subset=['A','B'])
результат работы этого примера:


