столбцы данных в мультистекс данных - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть следующие данные в листе 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

где я установлю from и to как установлено (set_index(['from','to']) для получения мультииндексного фрейма данных.

1 Ответ

0 голосов
/ 01 ноября 2018

для чтения такого фрейма данных многопользовательским пользователям с заголовком в 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

это означает, что вы говорите пандам, что у вас есть две строки заголовка 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
...