我有这个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=0
或axis=None
:
st.table(df_teams.style.apply(lambda x: team_colors[x], axis=0))
不!
TypeError: 'Series' objects are mutable, thus they cannot be hashed
答案 0 :(得分:2)
这是一种为字体着色的(有点怪异的)方法,只需将整个数据框传递给一个函数即可抓取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)
官方文档更加深入,请参阅here。