Вы можете использовать Matplotlib для создания тепловой карты и аннотировать ее:
import matplotlib.pyplot as plt
import numpy as np
plt.figure()
heatmap = plt.pcolor(df, cmap='viridis')
# Add text
for y in range(df.shape[0]):
for x in range(df.shape[1]):
plt.text(x + 0.5, y + 0.5, '{:.0f}'.format(df.iloc[y, x]),
color='w',horizontalalignment='center',
verticalalignment='center',)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.colorbar(heatmap)
plt.ylabel('points')
plt.xlabel('price')

Вы также можете использовать морскую волю для получения аннотированной жарыкарта проще:
import seaborn as sns
plt.figure()
sns.heatmap(df, annot=True, fmt='d')
plt.xlabel('Price')

Seaborn хорошо справляется с автоматическим форматированием затенения текста, чтобы его можно было видеть при изменении цвета фона.