将 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
我有 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