【问题标题】:Join 2 identical pandas dataframe into multi level row key将 2 个相同的 pandas 数据框加入多级行键
【发布时间】:2020-09-20 14:52:13
【问题描述】:

我有 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.sort_values('Site')
  • 添加.reorder_levels([1, 0])

标签: python pandas dataframe concatenation concat


【解决方案1】:

您可以将df.swapleveldf.sort_indexreindex 一起使用:

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

【讨论】:

  • 来自@Rocco,我也得到了print(res2.sort_values('Site').reset_index(level=['Site','Sensor']).set_index(['Site', 'Sensor'])),这在某种程度上得到了相同的结果。
猜你喜欢
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 2021-09-15
  • 2018-12-09
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多