如何根据元素的频率对 pandas 数据框进行颜色编码?

How to color code pandas dataframe according to frequency of elements?

我喜欢写代码,我喜欢打扑克!所以我正在尝试制作一个程序来跟踪我的扑克统计数据。

我使用 pandas 制作了一个扑克手牌范围 table,但是我无法根据与其他人相比我更倾向于 3-bet 的手牌对其进行颜色编码。

目前我的数据框是这样的:

我有手牌列表,我想根据他们的频率在此图表(数据框)中绘制。比方说:

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

为了给出一个想法,我希望我的图表看起来有点像这样:

这里黄色显示我经常 3bet 的牌,红色显示我 3bet 较少的牌,黄色和灰色显示我很少 3bet 的牌。

编辑

我能够得到我想要的结果。查看答案部分。

您也许应该尝试在 seaborn 中使用 style.background_gradient。这是您可以根据需要进行调整的示例。

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

它给出了这样的东西:

所以我简单地计算了我 3-bet 的手牌百分比并将其存储在字典中

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)