【问题标题】:df.style.apply centers multiindex values in displaydf.style.apply 在显示中居中显示多索引值
【发布时间】:2019-04-17 09:47:41
【问题描述】:

当我跑步时

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:由于我其实并不完全不喜欢第二种格式:如何修复多索引中的背景,使每个多索引级别中的组边界在视觉上变得清晰?

(PS:在我的实际代码中,对于某些行,lambda 返回 'background: green'

【问题讨论】:

    标签: python pandas jupyter


    【解决方案1】:

    在 GitHub herehere 上有一些相关讨论,关于应该应用于 th 的默认 vertical-alignment 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))
    

    【讨论】:

    • 如何将其与使用 style.apply 进行的样式更改相结合?我不能只是链接它,因为Styler object has no attribute style
    • @Bananach 我已经更新了我的答案以展示如何链接样式;我不知道你现在是如何应用事物的,但我想这是使用函数来设置样式的最简洁的方式(因此附加了 .applymap())。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多