【问题标题】:Is there a way to hide the same values in MultiIndex level 1?有没有办法在 MultiIndex 级别 1 中隐藏相同的值?
【发布时间】:2020-09-24 20:20:04
【问题描述】:

我在 pandas 中有以下数据框(名为 test):

 Group 1 Group 2  Species                     Adj. P-value
0   a      b      Parabacteroides goldsteinii    7
1   a      b      Parabacteroides johnsonii      8
2   a      b      Parabacteroides merdae         9
3   a      b      Parabacteroides sp             10
4   c      d      Bacteroides coprocola          1
5   c      d      Bacteroides dorei              2

我想将此表转换为 Latex 格式,但将第 1 组和第 2 组中的重复值居中(参见下图示例)。在 Latex 中,这是通过包 \multirow 完成的,df.to_latex 有一个名为 multirow 的参数来启用此功能 (to_latex)

但是,必须创建 MultiIndex 才能使用 to_latex 中的 multirow 选项。 所以我这样做了:

test.index = pd.MultiIndex.from_frame(test[["Group 1","Group 2"]])
test = test.drop(["Group 1","Group 2"], axis=1)
test

                Species                 Adj. P-value
Group 1 Group 2     
a       b       Parabacteroides goldsteinii      7
        b       Parabacteroides johnsonii        8
        b       Parabacteroides merdae           9
        b       Parabacteroides sp               10
c       d       Bacteroides coprocola            1
        d       Bacteroides dorei                2

最后我存储了表格:

test.to_latex("la_tex_tab.txt",multirow=True, index=True,float_format="{:0.3f}".format).

但是,这会产生:

它仅适用于级别 0(组 1),但不适用于 MultiIndex 的级别 1(组 2)。 您对如何避免 MultiIndex 中的 b 和 d 值重复有什么建议吗?

谢谢。

【问题讨论】:

    标签: python-3.x pandas latex multi-index


    【解决方案1】:

    如果你愿意的话,有点像黑客:

    test['Group 2'] = test['Group 2'].mask(test['Group 2'].duplicated(),'')
    test.set_index(["Group 1","Group 2"])
    

                            Species         Adj.  P-value
    Group 1 Group 2                                       
    a       b        Parabacteroides  goldsteinii        7
                     Parabacteroides    johnsonii        8
                     Parabacteroides       merdae        9
                     Parabacteroides           sp       10
    c       d            Bacteroides    coprocola        1
                         Bacteroides        dorei        2
    

    【讨论】:

      【解决方案2】:

      我们可以通过使用带有空白列的assign 仅显示来做到这一点

      test = test.assign(help='').set_index('help',append=True).drop(["Group 1","Group 2"], axis=1)
      

      【讨论】:

        猜你喜欢
        • 2011-07-06
        • 2016-05-29
        • 2021-09-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多