熊猫-具有apply和applymap的样式表

8位博尔赫斯

我有这个df_teams:

               ShortName Strength TeamColor
Team                                       
Arsenal              ARS        4   #EF0107
Aston Villa          AVL        2   #770038
Bournemouth          BOU        2   #D3151B
Brighton             BHA        2   #005DAA
Burnley              BUR        3   #630F33
Chelsea              CHE        4   #034694
Crystal Palace       CRY        3   #C4122E
Everton              EVE        3   #274488
Leicester            LEI        3   #0053A0
Liverpool            LIV        5   #CE1317
Man City             MCI        5   #97C1E7
Man Utd              MUN        4   #E80909
Newcastle            NEW        3   #231F20
Norwich              NOR        2   #00A14E
Sheffield Utd        SHU        3   #E52126
Southampton          SOU        3   #ED1A3B
Spurs                TOT        4   #132257
Watford              WAT        3   #FBEE23
West Ham             WHU        2   #7C2C3B
Wolves               WOL        4   #FDB913

我想打印一张表格,其中每一行都有团队颜色。

我知道我可以使用熊猫df_teams.style.applymap()方法。

我试过了:

st.table(df_teams.style.applymap(lambda x:df_teams['TeamColor'][x]))

不工作

KeyError: 'ARS'

还尝试了apply()

st.table(df_teams.style.apply(lambda x:df_teams['TeamColor'][x], axis=0))

都不是:

ValueError: cannot reindex from a duplicate axis

我该怎么做?

最好的方法是像使用团队色彩字典那样:

#A dictionary of team colors
team_colors = {'ARS':'#EF0107',
'AVL':'#770038',
'BOU':'#D3151B',
'BHA':'#005DAA',
'BUR':'#630F33',
'CHE':'#034694',
'CRY':'#C4122E',
'EVE':'#274488',
'LEI':'#0053A0',
'LIV':'#CE1317',
'MCI':'#97C1E7',
'MUN':'#E80909',
'NEW':'#231F20',
'NOR':'#00A14E',
'SHU':'#E52126',
'SOU':'#ED1A3B',
'TOT':'#132257',
'WAT':'#FBEE23',
'WHU':'#7C2C3B',
'WOL':'#FDB913'}

因此,我只能应用从该词典映射的函数,而不必在列中使用颜色作为值,这是不希望的。

我试过了:

st.table(df_teams.style.applymap(lambda x:team_colors[x]))

但是得到:

KeyError: '4'

并通过axis=0axis=None

st.table(df_teams.style.apply(lambda x: team_colors[x], axis=0))

不!

TypeError: 'Series' objects are mutable, thus they cannot be hashed
约斯科维亚

这是一种给字体上色的(有点怪异的)方法,只需将整个数据框传递给一个函数即可抓取TeamColor

def colo(df):
    return ['color: {}'.format(df['TeamColor'])]*3 # ncols

df_teams.style.apply(colo, axis=1)

axis=1 会将整个行传递给该函数,该函数使我们可以为整个行着色。

要使用数据框中的一列为行的背景着色,请使用以下功能:

def colo(df):
    return ['background-color: {}'.format(df['TeamColor'])]*3

如果您想在df之外使用字典:

def colo(df, dic):
    return ['background-color: {}'.format(dic[df['ShortName']])]*3

df_teams.style.apply(colo, dic=team_colors, axis=1)

官方文档更加深入,请参见此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章