pandas dataframe根据变量值到latex表

时间:2014-06-05 19:06:18

标签: python pandas latex dataframe

我有一个大型数据框

In [25]: df
Out[25]: 
    FN   FP   TN  TP                     data method
0    0    0  980  20  A p=1000 n=1000 SNR=0.5     HF
1    0    0  980  20  A p=1000 n=1000 SNR=0.5     HM
2   16    0  980   4  A p=1000 n=1000 SNR=0.5  HMP80
3   18    0  980   2  A p=1000 n=1000 SNR=0.5  HMP90
4    0    0  980  20  A p=1000 n=1000 SNR=0.5   LP70
5    0    0  980  20  A p=1000 n=1000 SNR=0.5   LP85
6    0    0  980  20  A p=1000 n=1000 SNR=0.5    lCV
7    0   58  922  20   C p=1000 n=200 SNR=0.5     HF
8    0   58  922  20   C p=1000 n=200 SNR=0.5     HM
9   17   13  967   3   C p=1000 n=200 SNR=0.5  HMP80
10  19    7  973   1   C p=1000 n=200 SNR=0.5  HMP90
11   0   58  922  20   C p=1000 n=200 SNR=0.5   LP70
12   0   58  922  20   C p=1000 n=200 SNR=0.5   LP85
13   0   58  922  20   C p=1000 n=200 SNR=0.5    lCV
14   0    0  980  20  B p=1000 n=1000 SNR=0.5     HF
15   0    0  980  20  B p=1000 n=1000 SNR=0.5     HM

我想获得一张乳胶餐桌:

1 - 方法是行名称。

2 - 根据数据值将表划分为块。数据应该是每个块的标题。

3 - 每行需要4个块。 (以适应页面)

4 - 必须根据数据的值按字母顺序排列块。

我曾尝试使用matrix2table库,但似乎需要进行大量的预处理工作。 有没有简单的方法来解决这个问题? 我对熊猫不太熟悉所以也许有一些有用的技巧。

编辑: 这就是乳胶文档中输出的样子。

An example of output 
      |TP     FP    TN     FN | TP   FP   TN   FN |   .... Other 2 blocks 
method| A p=1000 n=1000   data| A p=1000 n=100    |
HF    | 20    0     980     0 | 3     2    1    1 |
HM    | 20    0     980     0 | 2     5    62   3 |
...
...
----------------------------------------------------------------------------
    | B p=1000 n =100        |  B=1000 n=200      | ..........
HF  | 2      3       4     5 |  32   43    24   24| ..........
HM  | 34     532     23    3 |  23    3    23   23| ..........
...

1 个答案:

答案 0 :(得分:0)

您可能不得不在输出的LaTeX上进行格式化,但是这样做会有帮助吗?您的数据与输出不完全匹配,因此我做了一些假设更改。

In [362]: df
Out[362]: 
    FN  FP   TN  TP                     data method
0    0   0  980  20  A p=1000 n=1000 SNR=0.5     HF
1    0   0  980  20  A p=1000 n=1000 SNR=0.5     HM
2   16   0  980   4  A p=1000 n=1000 SNR=0.5  HMP80
3    0  58  922  20   C p=1000 n=200 SNR=0.5     HF
4    0  58  922  20   C p=1000 n=200 SNR=0.5     HM
5   17  13  967   3   C p=1000 n=200 SNR=0.5  HMP80
6    0   0  980  20  B p=1000 n=1000 SNR=0.5     HF
7    0   0  980  20  B p=1000 n=1000 SNR=0.5     HM
8    0   0  980  20   A p=1000 n=100 SNR=0.5     HF
9    0   0  980  20   A p=1000 n=100 SNR=0.5     HM
10  16   0  980   4   A p=1000 n=100 SNR=0.5  HMP80
11   0  58  922  20   C p=1000 n=100 SNR=0.5     HF
12   0  58  922  20   C p=1000 n=100 SNR=0.5     HM
13  17  13  967   3   C p=1000 n=100 SNR=0.5  HMP80
14   0   0  980  20   B p=1000 n=100 SNR=0.5     HF
15   0   0  980  20   B p=1000 n=100 SNR=0.5     HM

In [363]: df['data_group'] = df['data'].str.slice(0,1)

一旦你有一个标识每个行组的列,下面的代码(使用pandas groupby)将'data'行转换为列,并将section写入LaTeX格式的文本文件。

In [377]: with open('latex_table.txt', 'w') as f:
     ...:     header = True
     ...:     for _, df_gb in df.groupby('data_group'):
     ...:         df_gb = df_gb.drop('data_group', axis=1)
     ...:         df_gb = df_gb.pivot(index='method', columns='data')
     ...:         df_gb.columns = df_gb.columns.sortlevel(1)[0]
     ...:         df_gb.to_latex(f, header=header)