如何使用pandas pivot_table和数据框样式保留分层表?

时间:2016-05-11 15:09:34

标签: python html pandas pivot-table

在pandas版本18.1中,我无法弄清楚如何在数据透视表上使用.style元素来分层渲染结果,就像默认情况下所做的那样 to_html功能。

在使用样式器渲染输出时,是否有一些选项可以保留数据框中多索引的层次结构?

请参阅以下两个表格之间的视觉差异:

import pandas as pd
import numpy as np

np.random.seed(0)
a = np.random.randint(1, 4, 10)
b = np.random.randint(1, 4, 10)
c = np.random.randint(5, 9, 10)

df = pd.DataFrame(dict(A=a,B=b,C=c,Val=np.random.randint(1,10,10)))

tbl=pd.pivot_table(df,index=['A','B','C'], aggfunc=sum)
print tbl.to_html()
print tbl.style.render()

产地:

<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th></th>
      <th></th>
      <th>Val</th>
    </tr>
    <tr>
      <th>A</th>
      <th>B</th>
      <th>C</th>
      <th></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th rowspan="4" valign="top">1</th>
      <th>1</th>
      <th>5</th>
      <td>1</td>
    </tr>
    <tr>
      <th rowspan="3" valign="top">2</th>
      <th>5</th>
      <td>4</td>
    </tr>
    <tr>
      <th>6</th>
      <td>4</td>
    </tr>
    <tr>
      <th>8</th>
      <td>9</td>
    </tr>
    <tr>
      <th rowspan="3" valign="top">2</th>
      <th rowspan="3" valign="top">3</th>
      <th>5</th>
      <td>2</td>
    </tr>
    <tr>
      <th>6</th>
      <td>3</td>
    </tr>
    <tr>
      <th>8</th>
      <td>9</td>
    </tr>
    <tr>
      <th rowspan="2" valign="top">3</th>
      <th>1</th>
      <th>8</th>
      <td>4</td>
    </tr>
    <tr>
      <th>2</th>
      <th>7</th>
      <td>4</td>
    </tr>
  </tbody>
</table>

        <style  type="text/css" >
        
        
        </style>

        <table id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" None>
        

        <thead>
            
            <tr>
                
                <th class="blank">
                
                <th class="blank">
                
                <th class="blank">
                
                <th class="col_heading level0 col0">Val
                
            </tr>
            
            <tr>
                
                <th class="col_heading level2 col0">A
                
                <th class="col_heading level2 col1">B
                
                <th class="col_heading level2 col2">C
                
                <th class="blank">
                
            </tr>
            
        </thead>
        <tbody>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level2 row0">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level2 row0">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level2 row0">
                    5
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row0_col0" class="data row0 col0">
                    1
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row1">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row1">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row1">
                    5
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row1_col0" class="data row1 col0">
                    4
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row2">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row2">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row2">
                    6
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row2_col0" class="data row2 col0">
                    4
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row3">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row3">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row3">
                    8
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row3_col0" class="data row3 col0">
                    9
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row4">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row4">
                    3
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row4">
                    5
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row4_col0" class="data row4 col0">
                    2
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row5">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row5">
                    3
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row5">
                    6
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row5_col0" class="data row5 col0">
                    3
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row6">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row6">
                    3
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row6">
                    8
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row6_col0" class="data row6 col0">
                    9
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row7">
                    3
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row7">
                    1
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row7">
                    8
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row7_col0" class="data row7 col0">
                    4
                
            </tr>
            
            <tr>
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row8">
                    3
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row8">
                    2
                
                <th id="T_ae86631e_1789_11e6_aa5c_3417ebaea714" class="row_heading level0 row8">
                    7
                
                <td id="T_ae86631e_1789_11e6_aa5c_3417ebaea714row8_col0" class="data row8 col0">
                    4
                
            </tr>
            
        </tbody>
        </table>
        

1 个答案:

答案 0 :(得分:1)

如果你:

from IPython.core.display import HTML

然后

HTML(tbl.to_html())

HTML(tbl.style.render())

他们肯定看起来不一样。

来自documentation

  

临时:这是一项新功能,仍在开发中。我们将在未来版本中添加功能并可能进行重大更改。我们很乐意听取您的反馈意见。

我自己完成的工作是将idclass以及style附加到to_html()的输出中以设置我的表格。