我有一个大型数据框
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| ..........
...
答案 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)