Pandas 设置数据帧的上三角形、下三角形和对角线的样式
我已经生成了一个pandas数据框,我想使用Pandas 设置数据帧的上三角形、下三角形和对角线的样式,pandas,dataframe,pandas-styles,Pandas,Dataframe,Pandas Styles,我已经生成了一个pandas数据框,我想使用pd.dataframe().style突出显示一些单元格 v1 v2 v3 v4 v5 v1 0 1 1 1 0 v2 0 0 1 1 1 v3 0 0 0 0 0 v4 0 0 0 0 0 v5 0 0 0 0 0 我想给它的上三角和下三角以及对角线上色。为此,我做了以下工作: 计算下三角形、上三角形和对角线 def triang(df):
pd.dataframe().style
突出显示一些单元格
v1 v2 v3 v4 v5
v1 0 1 1 1 0
v2 0 0 1 1 1
v3 0 0 0 0 0
v4 0 0 0 0 0
v5 0 0 0 0 0
我想给它的上三角和下三角以及对角线上色。为此,我做了以下工作:
def triang(df):
temp=df.copy()
ut=np.triu(np.ones(df.shape),1).astype(np.bool)
lt=np.tril(np.ones(df.shape),-1).astype(np.bool)
temp=temp.where(ut==False, 'up')
temp=temp.where(lt==False, 'lt')
np.fill_diagonal(temp.values,'dg')
return(temp)
triang(mymat)
v1 v2 v3 v4 v5
v1 dg up up up up
v2 lt dg up up up
v3 lt lt dg up up
v4 lt lt lt dg up
v5 lt lt lt lt dg
def color_vals(value):
if value == 'up':
color='orange'
elif value=='lt':
color='blue'
else:
color='black'
return(color)
color_vals('up')
#'orange'
triang(mymat).style.applymap(color_vals)
#returns the same as triang(mymat)
mymat
,即带有0
和1
的矩阵)根据每个部分的颜色(上部、下部三角形和对角线)进行样式化
我该怎么做最后一步
提前非常感谢。IIUC,试试这个:
其中df_vals:
v1 v2 v3 v4 v5
v1 0 1 1 1 0
v2 0 0 1 1 1
v3 0 0 0 0 0
v4 0 0 0 0 0
v5 0 0 0 0 0
def triang(df):
temp=df.copy()
ut=np.triu(np.ones(df.shape),1).astype(np.bool)
lt=np.tril(np.ones(df.shape),-1).astype(np.bool)
temp=temp.where(ut==False, 'up')
temp=temp.where(lt==False, 'lt')
np.fill_diagonal(temp.values,'dg')
return(temp)
def color_vals(val):
"""
Color dataframe using values
"""
d = {'up' : 'orange',
'dg' : 'black',
'lt' : 'blue'}
return [f'color : {i}' for i in triang(df_vals).loc[val.name, val.index].map(d).tolist()]
df_vals.style.apply(color_vals)
输出:
IIUC,试试这个:
其中df_vals:
v1 v2 v3 v4 v5
v1 0 1 1 1 0
v2 0 0 1 1 1
v3 0 0 0 0 0
v4 0 0 0 0 0
v5 0 0 0 0 0
def triang(df):
temp=df.copy()
ut=np.triu(np.ones(df.shape),1).astype(np.bool)
lt=np.tril(np.ones(df.shape),-1).astype(np.bool)
temp=temp.where(ut==False, 'up')
temp=temp.where(lt==False, 'lt')
np.fill_diagonal(temp.values,'dg')
return(temp)
def color_vals(val):
"""
Color dataframe using values
"""
d = {'up' : 'orange',
'dg' : 'black',
'lt' : 'blue'}
return [f'color : {i}' for i in triang(df_vals).loc[val.name, val.index].map(d).tolist()]
df_vals.style.apply(color_vals)
输出:
我希望看到第一个矩阵(mymat,带有0和1的矩阵)根据每个部分的颜色(上部、下部三角形和对角线)进行样式化
好的,您可以修改如下函数:
def myfunc(x):
c1=np.triu(np.ones(df.shape),1).astype(np.bool)
c2=np.tril(np.ones(df.shape),-1).astype(np.bool)
col1='color:orange'
col2='color:blue'
col3='color:black'
df1 = pd.DataFrame(np.select([c1,c2],[col1,col2],col3),columns=x.columns,index=x.index)
return df1
我希望看到第一个矩阵(mymat,带有0和1的矩阵)根据每个部分的颜色(上部、下部三角形和对角线)进行样式化 好的,您可以修改如下函数:
def myfunc(x):
c1=np.triu(np.ones(df.shape),1).astype(np.bool)
c2=np.tril(np.ones(df.shape),-1).astype(np.bool)
col1='color:orange'
col2='color:blue'
col3='color:black'
df1 = pd.DataFrame(np.select([c1,c2],[col1,col2],col3),columns=x.columns,index=x.index)
return df1
嗨,斯科特,非常感谢你。但是,我希望看到包含这些颜色的
0
和1
的初始矩阵。如果我解释得不好,我会编辑我的帖子。。。可以我想我明白了。@Sosi我花了一点时间才重新开始工作。没问题,斯科特,谢谢你,我真的很感激!嗨,斯科特,非常感谢你。但是,我希望看到包含这些颜色的0
和1
的初始矩阵。如果我解释得不好,我会编辑我的帖子。。。可以我想我明白了。@Sosi我花了一点时间才重新开始工作。没问题,斯科特,谢谢你,我真的很感激!