将 2 个相同的 pandas 数据帧加入多级行键

Join 2 identical pandas dataframe into multi level row key

我有 2 个具有相同索引和列的数据框。我需要将它们加入或连接到一个数据框中。生成数据的代码如下:

import pandas as pd
sites = pd.Index(['AAA', 'BBB','CCC', 'DDD'], name='SITELIST')
vvv = pd.DataFrame({'KK':[1,2,3,4],'GG':[2,3,4,5], 'RR':[6,5,4,3]}, index = sites)
ttt = pd.DataFrame({'KK':[11,22,33,34],'GG':[23,33,34,35], 'RR':[26,25,24,23]}, index = sites)

生成的数据帧是

print(vvv)

          KK  GG  RR
SITELIST            
AAA        1   2   6
BBB        2   3   5
CCC        3   4   4
DDD        4   5   3

print(ttt)

          KK  GG  RR
SITELIST            
AAA       11  23  26
BBB       22  33  25
CCC       33  34  24
DDD       34  35  23

当我使用 concat 使用以下代码连接这两个数据帧时:

res2 = pd.concat([vvv, ttt], axis=0, keys=["VVV", "TTT"], names=['Sensor', 'Site'])

我得到的结果是:

print(res2)

             KK  GG  RR
Sensor Site            
VVV    AAA    1   2   6
       BBB    2   3   5
       CCC    3   4   4
       DDD    4   5   3
TTT    AAA   11  23  26
       BBB   22  33  25
       CCC   33  34  24
       DDD   34  35  23

我需要加入他们才能得到如下结果:

              KK  GG  RR
Site  Sensor
AAA   VVV      1   2   6
      TTT     11  23  26
BBB   VVV      2   3   5
      TTT     22  33  25
CCC   VVV      3   4   4
      TTT     33  34  24
DDD   VVV      4   5   3
      TTT     34  35  23

谢谢。

您可以使用 df.swaplevel with df.sort_index and reindex:

print(res2.swaplevel().sort_index(level=0).reindex(['VVV','TTT'],level=1))

             KK  GG  RR
Site Sensor            
AAA  VVV      1   2   6
     TTT     11  23  26
BBB  VVV      2   3   5
     TTT     22  33  25
CCC  VVV      3   4   4
     TTT     33  34  24
DDD  VVV      4   5   3
     TTT     34  35  23