【问题标题】:dataframe columns to multtindex dataframe数据框列到多索引数据框
【发布时间】:2019-04-05 05:06:34
【问题描述】:

我在 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 来访问数据。我知道当它们都作为索引时如何使用多索引,但是当索引在列上时无法掌握它。

非常感谢您的帮助:)

PS:

另一张纸可能如下所示:

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

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

【问题讨论】:

    标签: python-3.x pandas multi-index


    【解决方案1】:

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

    df = pd.read_excel('myFile.xlsx', header=[0,1])
    
        Y1      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 0.000
    

    这意味着你告诉 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 时,我没有将这些标题作为索引。我不明白为什么。对问题 2 有任何想法吗?谢谢你的时间:)
    • @Ali 我想我在更新的答案中回答了你的第二个问题。你的其他床单是什么样的?
    • 非常感谢您的回答。读取数据后(假设一次一张),如何设置索引?目前,如果我要求 df.index 我得到 1 到 6,而不是那些标题。对我来说挑战是 B AND Y 和 H 列必须是索引,而不仅仅是 Y 和 H。
    • @Ali 只是为了澄清您希望整个示例数据框成为行索引:所有列?
    • 我希望能够通过指定 B,Y,H 访问数据,我希望能够指定B,H,Y并获取对应的值。 (也许我没有正确理解一个概念,如果我让您感到困惑,请见谅。)
    猜你喜欢
    • 2019-01-16
    • 1970-01-01
    • 2022-01-04
    • 2021-06-10
    • 1970-01-01
    • 2020-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    相关资源
    最近更新 更多