我希望能够"透视";一个现有的数据框架,但不改变现有类别的行和列顺序,
我有这个数据框架
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