Каким образом стилизовать (раскрасить) значения DataFrame из одной части колоночного индекса на основании значений из другой части колоночного индекса?
Пример: Если значение колоночного индекса ['Единица'][2019][10] > 0
, то значение в ['Количество упаковок'][2019][10]
покрасить жёлтым. И так для каждого года и месяца.
Подозреваю, что можно сделать как-то так, но не найду, как именно применить CSS-стиль к конкретной ячейке прямо в функции.
Пример:
Исходный DF:
data = {111: {('Единица', 2019, 10): 1.0,
('Единица', 2019, 11): 0.0,
('Единица', 2019, 12): 0.0,
('Количество упаковок', 2019, 10): 5.0,
('Количество упаковок', 2019, 11): 0.0,
('Количество упаковок', 2019, 12): 0.0},
112: {('Единица', 2019, 10): 1.0,
('Единица', 2019, 11): 0.0,
('Единица', 2019, 12): 1.0,
('Количество упаковок', 2019, 10): 2.0,
('Количество упаковок', 2019, 11): 0.0,
('Количество упаковок', 2019, 12): 1.0}}
df = pd.DataFrame(data).T.rename_axis("id")
решение:
def highlight(df, color="yellow"):
vals = (df.loc[:, pd.IndexSlice["Единица"]] > 0).to_numpy()
tmp = np.column_stack((np.zeros_like(vals), vals))
tmp = np.where(tmp==True, f"background-color: {color}", "")
tmp = pd.DataFrame(tmp, index=df.index, columns=df.columns)
return tmp
df.style.apply(highlight, color="yellow", axis=None)
результат:
PS в следующий раз настоятельно рекомендую приводить в вопросе воспроизводимый пример данных...
Ещё один вариант того, как можно решить эту задачу.
def highlight_visit(row):
ret = ["" for _ in row.index]
for year in row['Единица'].index.get_level_values(0).unique():
for month in row['Единица'].index.get_level_values(1).unique():
if row['Единица'][year][month] > 0:
ret[row.index.get_loc(
('Количество упаковок', year, month)
)] = "background-color: yellow"
return ret
И выгрузка в excel с сохранением форматирования.
df_sales_rnc_acts_grp.style.apply(highlight_visit, axis = 1) \
.to_excel('/Users/vadimvitkauskas/Downloads/colored.xlsx', engine = 'openpyxl')
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Сделал сайт на php, решил сделать десктопный клиент, используя nwjs, но столкнулся с проблемой: при запуске nw
У меня проблема мне нужно сделать чтобы одна картинка была внизу а другая как бы поверх егоНо получается все наоборот знает кто нибудь как...
Я пытаюсь создать мало-мальски нормальную плашку, но мало того что при не моем формате экрана сливаются слова, так еще и картинка не отображаетсяОна...
Если прописывать в запрос данные то работает, но если работа через форму то через var_dump выводит NULL