Как раскрасить фрейм данных pandas в соответствии с частотой элементов?

#python-3.x #pandas #dataframe #color-scheme #poker

#python-3.x #pandas #фрейм данных #цветовая схема #покер

Вопрос:

Мне нравится кодировать, и мне нравится играть в покер! Итак, я пытаюсь создать программу для отслеживания моей статистики покера.

Я создал таблицу диапазона покерных комбинаций, используя pandas, однако я не могу раскрасить ее в соответствии с руками, которые я склонен делать на 3 ставки больше по сравнению с другими.

В настоящее время мой фрейм данных выглядит так:

введите описание изображения здесь

У меня есть список рук, которые я хочу отобразить на этой диаграмме (фрейме данных) в соответствии с их частотой. Допустим:

 Hands = ["A A","K K","A Ks"....]
 

Чтобы дать представление, я хочу, чтобы моя диаграмма выглядела примерно так:

введите описание изображения здесь

Здесь желтый показывает руки, которые я часто делаю 3-бет, красный показывает руки, которые я делаю 3-бет реже, чем желтый, а серый — руки, которые я делаю 3-бет редко.

Редактировать

Я смог получить желаемый результат. Ознакомьтесь с разделом ответов.

Комментарии:

1. Добро пожаловать в Stackoverflow (SO). Обратите внимание на одну вещь: как правило, на SO не публикуйте скриншоты и не делитесь кодом, который показывает ваши попытки.

2. Я буду иметь это в виду, спасибо. К счастью, я смог получить желаемый результат, используя тепловые карты.

Ответ №1:

Возможно, вам следует попробовать использовать style.background_gradient in seaborn . Вот пример, который вы могли бы адаптировать к своим потребностям.

 import pandas as pd
import numpy as np
import seaborn as sns

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],
               axis=1)
df.iloc[3, 3] = np.nan
df.iloc[0, 2] = np.nan

cm = sns.light_palette("green", as_cmap=True)

df2 = df.style.background_gradient(cmap=cm)
df2
 

что дает что-то вроде этого:

введите описание изображения здесь

Ответ №2:

Итак, я просто вычислил процент рук, которые я сделал 3-бет, и сохранил его в словаре

 freq_percentage = dict()
for i in freq_each:
    if(i in freq_each_raised):
        freq_percentage[i] = freq_each_raised[i]/freq_each[i]
 

Здесь freq_each freq_each_raised хранится частота каждой раздачи, сохраняется частота каждой поднятой руки и freq_percentage сохраняется процент времени, когда я поднял конкретную руку.

 matrix = [[0 for i in range(13)] for j in range(13)]

for i in freq_percentage:
    for m in range(13):
        b = 0
        for n in range(13):
            if(chart[m][n]==i):
                matrix[m][n]=round(freq_percentage[i],2)
                b = 1
                break
        if(b):
            break

hands_percentage = pd.DataFrame(matrix)
plt.figure(figsize=(14,7))
axs = sns.heatmap(hands_percentage, annot = chart, fmt = '',xticklabels=False, yticklabels=False)
 

введите описание изображения здесь