我跑步时
import pandas as pd
from IPython.display import display
df = pd.DataFrame('a',index=pd.MultiIndex.from_product([[0,1]]*3),columns=['A'])
display(df)
display(df.style.apply(lambda x: ['']*len(x),axis=1))
在Jupyter中,我得到以下显示(很遗憾,我无法上传屏幕截图)
0 0 0 a
1 a
1 0 a
1 a
1 0 0 a
1 a
1 0 a
1 a
-
0 a
0
1 a
0
0 a
1
1 a
0 a
0
1 a
1
0 a
1
1 a
1:如何防止该更改?
2:由于我实际上并不完全不喜欢第二种格式:如何固定多索引的背景,以使每个多索引级别的组的边界在视觉上清晰可见? < / p>
(PS:在我的实际代码中,lambda返回'background: green'
对于某些行)
答案 0 :(得分:1)
在GitHub here和here上有一些相关讨论,涉及应应用于vertical-alignment
的默认th
CSS属性;我认为这些CSS样式应该为您提供一个良好的起点:
s=df.style.set_table_styles([
{'selector': 'th',
'props': [
('border-style', 'solid'),
('border-color', 'Red'),
('vertical-align','top')
]
}]
)
HTML(s.render())
这将使MultiIndices高度对齐,并为其赋予红色边框。
更新
我不知道您如何评估样式/条件,但是如果您的DF中有一些“ b”(例如df.loc[0,0,1]='b'
,df.loc[1,0,1]='b'
),那么您可以定义一个样式函数,例如:
def color_b_green(value):
if value == 'b':
color = 'blue'
else:
color = 'black'
return 'color: %s' % color
最后将所有内容链接在一起(在这里清理),如下所示:
styles=[
{'selector': 'th',
'props': [
('border-style', 'solid'),
('border-color', 'Red'),
('vertical-align','top')
]
}]
(df.style
.apply(lambda x: ['']*len(x),axis=1)
.applymap(color_b_green)
.set_table_styles(styles))