Как сделать выражение индексатора, чтобы разрезать Multilndex и выбирать значения в Python, когда выбранные индексаторы являются непрерывными целыми числами? - PullRequest
0 голосов
/ 22 июня 2019

Я использую MuilIndexed dataframe в python для обработки некоторых измеренных данных с информацией о времени.

Я использую «h» в качестве имени индекса первого уровня, указывающего час, когда появились данные, и «min» в качестве второго уровня, указывающего минуты.Когда я хочу получить среднее значение данных в период с 10:03 до 10:15 или еще более длительное время, я не могу найти правильное представление для среза данных.Код всегда поставляется с SyntaxError: неверный синтаксис.

Фрейм данных соответствует следующему и именуется как «означает»:

               L = 0.96m    L = 1.46m
h   min     
10  3   -0.116562   -0.110844
        4   -0.113849   -0.134462
        5   -0.140548   -0.132054
        6   -0.139505   -0.134903
        7   -0.124237   -0.116645
        8   -0.119559   -0.120527
        9   -0.136731   -0.159849
        10  -0.124228   -0.118011
        11  -0.137301   -0.124688
        12  -0.166075   -0.137226
        13  -0.124688   -0.126409
        14  -0.129269   -0.126247
        15  -0.104269   -0.126129
        16  -0.132237   -0.135247
        17  -0.124815   -0.148978
        18  -0.110742   -0.116591
        19  -0.124419   -0.124731
        20  -0.117151   -0.135806
        21  -0.135688   -0.124796
        22  -0.130656   -0.121968
        23  -0.142452   -0.141645
        24  -0.112304   -0.121370
        25  -0.115796   -0.134624
        26  -0.126860   -0.122817
        27  -0.120161   -0.115043
        28  -0.117656   -0.107355
        29  -0.127645   -0.138753
        30  -0.135054   -0.120380
        31  -0.142022   -0.110409
        32  -0.132978   -0.115677
        ...

Код, который я сейчас использую:

means.loc(axis=0)[10,[3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15]]

Работает.

                L = 0.96m   L = 1.46m
h   min     
10  3   -0.116562   -0.110844
        4   -0.113849   -0.134462
        5   -0.140548   -0.132054
        6   -0.139505   -0.134903
        7   -0.124237   -0.116645
        8   -0.119559   -0.120527
        9   -0.136731   -0.159849
        10  -0.124228   -0.118011
        11  -0.137301   -0.124688
        12  -0.166075   -0.137226
        13  -0.124688   -0.126409
        14  -0.129269   -0.126247
        15  -0.104269   -0.126129

НО, когда я использую следующий код для удобства:

means.loc(axis=0)[10,[3:14]]

Он имеет синтаксическую ошибку: неверный синтаксис.Так есть ли какой-нибудь другой удобный способ, такой как выделение диапазона значений в пандах, вместо перечисления всех необходимых индексаторов?В случае получения значений длительностью от 10:03 до 10:59 мне было бы сложно перечислить все необходимые индексаторы на уровне 'min'.

1 Ответ

0 голосов
/ 22 июня 2019

Чтобы исправить вашу немедленную ошибку, попробуйте:

means.loc(axis=0)[10, slice(3, 14)]

На более общем уровне может быть проще использовать одноуровневый DatetimeIndex вместо MultiIndex, поскольку это позволит вам использовать пандфункции индексирования и нарезки по дате и времени.

...