У меня есть pandas DataFrame с разными строковыми значениями, которые должны быть заполнены разными цветами.
Для следующего DataFrame df
все, что я хочу, это чтобы разные ячейки были разных цветов. Например, ячейки со значением «A» отмечены красным, ячейки со значением «B» — зеленым, «C» — синим, «D» — серым и т. д.
df=pd.DataFrame({'a':['A','B','D'],'b':['E','B','C'],'c':['F','A','D']})
Как я могу добиться этого с помощью Styler.apply
? Есть предположения?
пытаться:
col_dict = {'A': 'red', 'B': 'green', 'C': 'blue', 'D': 'gray'}
def colour_cell(val):
if val in col_dict:
return 'Background-color: %s' % col_dict[val]
return ''
df.style.applymap(colour_cell)
Одно линейное решение (при условии, что все значения будут иметь назначенный ему цвет):
df.style.applymap(lambda v: 'Background-color: %s' % col_dict[v])
Вы можете использовать Styling со словарем цветов, которым вы хотите сопоставить значения:
import pandas as pd
d = {'a': ['A', 'B', 'D'], 'b': ['E', 'B', 'C'], 'c': ['F', 'A', 'D']}
df = pd.DataFrame(data=d)
df
color_mapping = {'A': 'red', 'B': 'green', 'C': 'blue', 'D': 'gray', 'E': 'indigo', 'F': 'violet'}
df.style.applymap(lambda v: f"color: {color_mapping.get(v, 'black')}")
Если вы хотите, чтобы ячейки были заполнены цветом, используйте background-color
вместо color
:
df.style.applymap(lambda v: f"background-color: {color_mapping.get(v, 'black')}")
Если вы хотите установить цвет фона и цвет текста на белый для лучшей читабельности:
df.style.applymap(lambda v: f"background-color: {color_mapping.get(v, 'black')}").applymap(lambda _: "color: white")