将 Pandas DF 中的数据放入网格或模板中

Place data from a Pandas DF into a Grid or Template

我有一个过程,其中最终产品是一个 Pandas DF,其中输出在数据和长度方面是可变的,其结构类似于这个输出示例。

9   80340796
10  80340797
11  80340798
12  80340799
13  80340800
14  80340801
15  80340802
16  80340803
17  80340804
18  80340805
19  80340806
20  80340807
21  80340808
22  80340809
23  80340810
24  80340811
25  80340812
26  80340813
27  80340814
28  80340815
29  80340816
30  80340817
31  80340818
32  80340819
33  80340820
34  80340821
35  80340822
36  80340823
37  80340824
38  80340825
39  80340826
40  80340827
41  80340828
42  80340829
43  80340830
44  80340831
45  80340832
46  80340833

我需要根据上面第一列中的数字将上面第二列中的数字转换为以下网格格式。

    1   2   3   4   5   6   7   8   9   10  11  12
A   1   9   17  25  33  41  49  57  65  73  81  89
B   2   10  18  26  34  42  50  58  66  74  82  90
C   3   11  19  27  35  43  51  59  67  75  83  91
D   4   12  20  28  36  44  52  60  68  76  84  92
E   5   13  21  29  37  45  53  61  69  77  85  93
F   6   14  22  30  38  46  54  62  70  78  86  94
G   7   15  23  31  39  47  55  63  71  79  87  95
H   8   16  24  32  40  48  56  64  72  80  88  96

所以这个例子的最终结果是

任何关于如何解决这个问题的建议都将不胜感激。一位同事要求我提供此数据,因此数据对于他们的团队来说很容易阅读(因为它与物理测试的布局相匹配)但我不知道如何生成它。

pandas pivot table,可以在你的问题中做你想做的,但首先你必须创建 2 个辅助列,1 个确定值必须进入哪一列,另一个确定哪一行这是。你可以得到它,如下例所示:

import numpy as np
import pandas as pd
df = pd.DataFrame({'num': list(range(9, 28)), 'val': list(range(80001, 80020))})

max_rows = 8

df['row'] = (df['num']-1)%8
df['col'] = np.ceil(df['num']/8).astype(int)

df.pivot_table(values=['val'], columns=['col'], index=['row'])


         val                  
col        2        3        4
row                           
0    80001.0  80009.0  80017.0
1    80002.0  80010.0  80018.0
2    80003.0  80011.0  80019.0
3    80004.0  80012.0      NaN
4    80005.0  80013.0      NaN
5    80006.0  80014.0      NaN
6    80007.0  80015.0      NaN
7    80008.0  80016.0      NaN