pandas - 设置熊猫数据框的上三角、下三角和对角线样式
问题描述
我已经生成了一个 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): 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)
我被困在风格部分(第 3 步)。我希望看到根据每个部分的颜色(上、下三角形和对角线)风格化的第一个矩阵( 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)
输出:
推荐阅读
- javascript - MongoDB无法读取未定义的属性“推送”
- tsql - 如何将多个 CSV 文件导入 SQL Server 表?
- django - Django REST framework 后端过滤问题与 React.js 前端
- javascript - 如何使用 javascript 选择不是事件的匹配 html 元素?
- java - 在分隔符上拆分列表元素。将原始元素存储为键,将拆分子字符串列表存储为哈希图中的值
- python - 使用 jupyter 在 python 中导出 csv 时遇到问题
- node.js - Xero API 403 - AuthenticationUnsuccessful 错误
- postgresql - 从 EC2 到 RDS 运行缓慢的 postgres11 逻辑复制
- python - 平铺python游戏(pygame)
- css - 如何突出显示未悬停在悬停上的 div