Python 3.x 数据帧列到多索引数据帧

Python 3.x 数据帧列到多索引数据帧,python-3.x,pandas,multi-index,Python 3.x,Pandas,Multi Index,我在Excel工作表中有以下数据,我想将其作为多索引数据框读取: Y1 Y1 Y2 Y2 B H1 H2 H1 H2 1 80 72 79.2 84.744 2 240 216 237.6 254.232 3 40 36 39.6 42.372 4 160 144 158.4

我在Excel工作表中有以下数据,我想将其作为多索引数据框读取:

    Y1     Y1      Y2           Y2
B   H1     H2      H1           H2
1   80     72      79.2         84.744
2   240    216     237.6        254.232
3   40     36      39.6         42.372
4   160    144     158.4        169.488
5   240    216     237.6        254.232
6   0      0       0            0
我是这样读的:

DATA = pd.read_excel('data.xlsx',sheet_name=None)
因为我也在看其他的报纸

问题1:

此数据不作为多索引数据读取。如何使其作为多索引读取?或者我应该把它读作一个数据帧,然后把它转换成多索引? 读取为数据帧的当前结果

DATA['Load']
      Y1 Y1.1     Y2     Y2.1
bus   H1   H2     H1       H2
1     80   72   79.2   84.744
2    240  216  237.6  254.232
3     40   36   39.6   42.372
4    160  144  158.4  169.488
5    240  216  237.6  254.232
6      0    0      0        0
问题2,可能是更基本的问题:

当一个或多个索引位于列侧时,如何处理多索引?在本例中,我希望通过指定
B,Y,H
来访问数据。我知道当多个索引都作为索引时如何使用它们,但当索引位于列上时,我就无法掌握它的诀窍

非常感谢您的帮助:)

附言:

另一张图纸可能如下所示:

from    to  x     ratea
1       2   0.4   10
1       4   0.6   80
1       5   0.2   10
2       3   0.2   10
2       4   0.4   10
2       6   0.3   10
3       5   0.2   10
4       6   0.3   10

在这里,我将设置
from
to
为set(
set_index(['from','to']
)以获取多索引数据帧。

要向多索引用户读取这样的数据帧,请在
pd.read_excel()中读取头参数。

这意味着您正在告诉pandas您有两个标题行0和1

谈话结束后:

df = pd.read_excel('Book2.xlsx', header=[0,1])
df2 = df.unstack().to_frame()
idx = df2.swaplevel(0,2).swaplevel(1,2).index.set_names(['B', 'Y', 'H'])
df2.set_index(idx, inplace=True)

            0
B   Y   H   
1   Y1  H1  80.000
2   Y1  H1  240.000
3   Y1  H1  40.000
4   Y1  H1  160.000
5   Y1  H1  240.000
6   Y1  H1  0.000
1   Y1  H2  72.000
2   Y1  H2  216.000
3   Y1  H2  36.000
4   Y1  H2  144.000
5   Y1  H2  216.000
6   Y1  H2  0.000
1   Y2  H1  79.200
2   Y2  H1  237.600
3   Y2  H1  39.600
4   Y2  H1  158.400
5   Y2  H1  237.600
6   Y2  H1  0.000
1   Y2  H2  84.744
2   Y2  H2  254.232
3   Y2  H2  42.372
4   Y2  H2  169.488
5   Y2  H2  254.232
6   Y2  H2  0.000

谢谢。当我只看一张纸的时候,这就行了。如果我理解正确,我需要单独阅读那张纸,我不能和其他的纸一起阅读,然后设置索引,对吗?假设它是像你说的那样单独阅读的,当我写df.index时,我没有把这些标题作为索引。我不明白为什么。有什么想法吗ion 2?谢谢你抽出时间:)@Ali我想我在更新的答案中回答了你的第二个问题。你的其他床单是什么样子的?非常感谢你的回答。读取数据后(假设一次读取一张表),如何设置索引?目前,如果我要求
df.index
我得到的是1到6,而不是那些标题。我面临的挑战是B列、Y列和H列必须是索引,而不仅仅是Y列和H列。@Ali为了澄清,您希望整个示例数据框成为行索引:所有列?我希望能够通过指定
B、Y、H
来访问数据,类似于我发布的另一张表,我可以在其中指定
“from”,'到'
,然后我指定列
'x'
并得到x值,我希望能够指定
B,H,Y
并得到相应的值。(可能我没有正确理解一个概念,如果我把你弄糊涂了,很抱歉。)
df = pd.read_excel('Book2.xlsx', header=[0,1])
df2 = df.unstack().to_frame()
idx = df2.swaplevel(0,2).swaplevel(1,2).index.set_names(['B', 'Y', 'H'])
df2.set_index(idx, inplace=True)

            0
B   Y   H   
1   Y1  H1  80.000
2   Y1  H1  240.000
3   Y1  H1  40.000
4   Y1  H1  160.000
5   Y1  H1  240.000
6   Y1  H1  0.000
1   Y1  H2  72.000
2   Y1  H2  216.000
3   Y1  H2  36.000
4   Y1  H2  144.000
5   Y1  H2  216.000
6   Y1  H2  0.000
1   Y2  H1  79.200
2   Y2  H1  237.600
3   Y2  H1  39.600
4   Y2  H1  158.400
5   Y2  H1  237.600
6   Y2  H1  0.000
1   Y2  H2  84.744
2   Y2  H2  254.232
3   Y2  H2  42.372
4   Y2  H2  169.488
5   Y2  H2  254.232
6   Y2  H2  0.000