如何根据元素的频率对 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)
我喜欢写代码,我喜欢打扑克!所以我正在尝试制作一个程序来跟踪我的扑克统计数据。
我使用 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)