如何在不更改行和列顺序的情况下"pivot"数据帧



我希望能够"透视";一个现有的数据框架,但不改变现有类别的行和列顺序,

我有这个数据框架

shortCode      period      WS   $/mt  change
0        TC2  2023-04-03  279.17    NaN     NaN
1        TC2       BALMO  228.49  39.30   -5.88
2        TC2      Apr 23  231.31  39.78   -5.40
3        TC2      May 23  222.33  38.24   -2.30
4        TC2      Jun 23  212.64  36.57   -1.38
5        TC2      Jul 23  193.36  33.26   -0.51
6        TC2      Aug 23  189.42  32.58   -0.62
7        TC2      Sep 23  185.48  31.90   -0.75
8        TC2       Q2 23  222.09  38.20   -3.02
9        TC2       Q3 23  189.42  32.58   -0.63
10       TC2       Q4 23  190.58  32.78   -0.56
11       TC2       Q1 24     NaN  28.75    0.34
12       TC2       Q2 24     NaN  26.52    0.04
13       TC2      Cal 24     NaN  26.55   -0.03
14       TC2      Cal 25     NaN  26.00   -0.26
15       TC5  2023-04-03  203.57    NaN     NaN
16       TC5       BALMO  198.80  54.05   -1.42
17       TC5      Apr 23  199.07  54.13   -1.34
18       TC5      May 23  203.35  55.29   -2.33
19       TC5      Jun 23  195.55  53.17   -1.21
.....
55      TC14       Q4 23  159.97  38.66   -0.05
56      TC14       Q1 24     NaN  30.00    0.30
57      TC14       Q2 24     NaN  28.58    0.04
58      TC14      Cal 24     NaN  28.38   -0.02
59      TC14      Cal 25     NaN  28.04   -0.14
60      TC17  2023-04-03  252.50    NaN     NaN
61      TC17       BALMO  272.74  36.00   -0.16
62      TC17      Apr 23  271.62  35.85   -0.31
63      TC17      May 23  281.60  37.17   -0.44
64      TC17      Jun 23  281.38  37.14   -0.70
65      TC17      Jul 23  272.04  35.91   -0.43
66      TC17      Aug 23  267.04  35.25   -0.43
67      TC17      Sep 23  257.08  33.94   -0.43
68      TC17       Q2 23  278.20  36.72   -0.48
69      TC17       Q3 23  265.39  35.03   -0.44
70      TC17       Q4 23  275.70  36.39   -0.44
71      TC17       Q1 24     NaN  31.84    0.00
72      TC17       Q2 24     NaN  30.36    0.00
73      TC17      Cal 24     NaN  31.20    0.16
74      TC17      Cal 25     NaN  30.63    0.16

"TC"s的行和列始终遵循相同的顺序

我希望实现(没有足够的空间来显示,但数据框是16 × 16)

shortCode     TC2 Unnamed: 2 Unnamed: 3     TC5 Unnamed: 5 Unnamed: 6  
0       period      WS       $/mt     change      WS       $/mt     change   
1   2023-04-03  279.17        NaN        NaN  203.57        NaN        NaN   
2        BALMO  228.49       39.3      -5.88   198.8      54.05      -1.42   
3       Apr 23  231.31      39.78       -5.4  199.07      54.13      -1.34   
4       May 23  222.33      38.24       -2.3  203.35      55.29      -2.33   
5       Jun 23  212.64      36.57      -1.38  195.55      53.17      -1.21   
6       Jul 23  193.36      33.26      -0.51  194.63      52.92      -2.64   
7       Aug 23  189.42      32.58      -0.62  193.34      52.57      -2.55   
8       Sep 23  185.48       31.9      -0.75  192.03      52.21      -2.48   
9        Q2 23  222.09       38.2      -3.02  199.32       54.2      -1.62   
10       Q3 23  189.42      32.58      -0.63  193.33      52.57      -2.55   
11       Q4 23  190.58      32.78      -0.56  185.81      50.52      -1.74   
12       Q1 24     NaN      28.75       0.34     NaN      46.58          0   
13       Q2 24     NaN      26.52       0.04     NaN      41.41          0   
14      Cal 24     NaN      26.55      -0.03     NaN      41.13      -0.37   
15      Cal 25     NaN         26      -0.26     NaN      40.62      -0.42   
TC6 Unnamed: 8 Unnamed: 9    TC14 Unnamed: 11 Unnamed: 12    TC17  
0       WS       $/mt     change      WS        $/mt      change      WS   
1      440        NaN        NaN  123.33         NaN         NaN   252.5   
2   288.02      22.29      -0.16  169.04       40.86       -0.23  272.74   
3   296.47      22.95        0.5   166.5       40.24       -0.85  271.62   
4   241.89      18.72      -0.21  170.31       41.16       -0.85   281.6   
5   225.58      17.46      -0.18  165.76       40.06       -0.18  281.38   
6   216.72      16.77          0  158.97       38.42       -0.14  272.04   
7   190.63      14.76       0.05   154.2       37.27       -0.02  267.04   
8   194.32      15.04          0  151.83        36.7        0.05  257.08   
9   254.65      19.71       0.04  167.52       40.49       -0.62   278.2   
10  200.56      15.52       0.01     155       37.46       -0.04  265.39   
11  234.77      18.17          0  159.97       38.66       -0.05   275.7   
12     NaN      14.08          0     NaN          30         0.3     NaN   
13     NaN      13.96          0     NaN       28.58        0.04     NaN   
14     NaN      13.98       0.01     NaN       28.38       -0.02     NaN   
15     NaN       13.5       0.01     NaN       28.04       -0.14     NaN   
Unnamed: 14 Unnamed: 15  
0         $/mt      change  
1          NaN         NaN  
2           36       -0.16  
3        35.85       -0.31  
4        37.17       -0.44  
5        37.14        -0.7  
6        35.91       -0.43  
7        35.25       -0.43  
8        33.94       -0.43  
9        36.72       -0.48  
10       35.03       -0.44  
11       36.39       -0.44  
12       31.84           0  
13       30.36           0  
14        31.2        0.16  
15       30.63        0.16  

基本上只是一个枢轴,但保持行顺序和列顺序为1。WS - 2。美元/吨3。把

如果我使用pivot,

df_test = df_tc.pivot(index='period' , columns='shortCode', values=['WS', '$/mt', 'change'])

订单将会丢失

WS                                   $/mt                
shortCode     TC14    TC17     TC2     TC5     TC6   TC14   TC17    TC2   
period                                                                    
2023-04-03  123.33  252.50  279.17  203.57  440.00    NaN    NaN    NaN   
Apr 23      166.50  271.62  231.31  199.07  296.47  40.24  35.85  39.78   
Aug 23      154.20  267.04  189.42  193.34  190.63  37.27  35.25  32.58   
BALMO       169.04  272.74  228.49  198.80  288.02  40.86  36.00  39.30   
Cal 24         NaN     NaN     NaN     NaN     NaN  28.38  31.20  26.55   
Cal 25         NaN     NaN     NaN     NaN     NaN  28.04  30.63  26.00   
Jul 23      158.97  272.04  193.36  194.63  216.72  38.42  35.91  33.26   
Jun 23      165.76  281.38  212.64  195.55  225.58  40.06  37.14  36.57   
May 23      170.31  281.60  222.33  203.35  241.89  41.16  37.17  38.24   
Q1 24          NaN     NaN     NaN     NaN     NaN  30.00  31.84  28.75   
Q2 23       167.52  278.20  222.09  199.32  254.65  40.49  36.72  38.20   
Q2 24          NaN     NaN     NaN     NaN     NaN  28.58  30.36  26.52   
Q3 23       155.00  265.39  189.42  193.33  200.56  37.46  35.03  32.58   
Q4 23       159.97  275.70  190.58  185.81  234.77  38.66  36.39  32.78   
Sep 23      151.83  257.08  185.48  192.03  194.32  36.70  33.94  31.90 

如果我理解正确,你只想正确排序列索引:

print(df)
out = (
df.set_index(["period", "shortCode"])
.unstack("shortCode")
.swaplevel(0, 1, axis=1)
.sort_index(axis=1, level=0, sort_remaining=False)
)
print(out)

打印:

shortCode      TC2                   TC5              
WS   $/mt change      WS   $/mt change
period                                                
2023-04-03  279.17    NaN    NaN  203.57    NaN    NaN
Apr 23      231.31  39.78  -5.40  199.07  54.13  -1.34
Aug 23      189.42  32.58  -0.62     NaN    NaN    NaN
BALMO       228.49  39.30  -5.88  198.80  54.05  -1.42
Cal 24         NaN  26.55  -0.03     NaN    NaN    NaN
Cal 25         NaN  26.00  -0.26     NaN    NaN    NaN
Jul 23      193.36  33.26  -0.51     NaN    NaN    NaN
Jun 23      212.64  36.57  -1.38  195.55  53.17  -1.21
May 23      222.33  38.24  -2.30  203.35  55.29  -2.33
Q1 24          NaN  28.75   0.34     NaN    NaN    NaN
Q2 23       222.09  38.20  -3.02     NaN    NaN    NaN
Q2 24          NaN  26.52   0.04     NaN    NaN    NaN
Q3 23       189.42  32.58  -0.63     NaN    NaN    NaN
Q4 23       190.58  32.78  -0.56     NaN    NaN    NaN
Sep 23      185.48  31.90  -0.75     NaN    NaN    NaN

DataFrame使用:

shortCode      period      WS   $/mt  change
0        TC2  2023-04-03  279.17    NaN     NaN
1        TC2       BALMO  228.49  39.30   -5.88
2        TC2      Apr 23  231.31  39.78   -5.40
3        TC2      May 23  222.33  38.24   -2.30
4        TC2      Jun 23  212.64  36.57   -1.38
5        TC2      Jul 23  193.36  33.26   -0.51
6        TC2      Aug 23  189.42  32.58   -0.62
7        TC2      Sep 23  185.48  31.90   -0.75
8        TC2       Q2 23  222.09  38.20   -3.02
9        TC2       Q3 23  189.42  32.58   -0.63
10       TC2       Q4 23  190.58  32.78   -0.56
11       TC2       Q1 24     NaN  28.75    0.34
12       TC2       Q2 24     NaN  26.52    0.04
13       TC2      Cal 24     NaN  26.55   -0.03
14       TC2      Cal 25     NaN  26.00   -0.26
15       TC5  2023-04-03  203.57    NaN     NaN
16       TC5       BALMO  198.80  54.05   -1.42
17       TC5      Apr 23  199.07  54.13   -1.34
18       TC5      May 23  203.35  55.29   -2.33
19       TC5      Jun 23  195.55  53.17   -1.21

相关内容

  • 没有找到相关文章

最新更新