Numpy table - расширенный выбор нескольких критериев

У меня есть таблица, которая выглядит примерно так:

IDs    Timestamp     Values

124    300.6          1.23
124    350.1         -2.4
309    300.6          10.3
12     123.4          9.00
18     350.1          2.11
309    350.1          8.3

       ...

, и я хотел бы выбрать все строки, принадлежащие группе идентификаторов. Я знаю, что могу сделать что-то вроде

table[table.IDs == 124]

, чтобы выбрать всю строку одного идентификатора, и я могу сделать

table[(table.IDs == 124) | (table.IDs == 309)]

, чтобы получить две строки идентификатора. Но представьте, что у меня есть ~ 100 000 строк с более чем 1000 уникальными идентификаторами (которые отличаются от индексов строк), и я хочу выбрать все строки, соответствующие набору из 10 идентификаторов. Интуитивно я хотел бы сделать следующее:

# id_list: a list of 10 IDs
table[ table.IDs in id_list ]

но Python отвергает этот синтаксис. Единственный способ, который я могу придумать, - это сделать следующее:

table[ (table.IDs == id_list[0]) |
       (table.IDs == id_list[1]) |
       (table.IDs == id_list[2]) |
       (table.IDs == id_list[3]) |
       (table.IDs == id_list[4]) |
       (table.IDs == id_list[5]) |
       (table.IDs == id_list[6]) |
       (table.IDs == id_list[7]) |
       (table.IDs == id_list[8]) |
       (table.IDs == id_list[9]) ]

, что мне кажется очень неэлегантным - слишком много кода и отсутствие гибкости для списков разной длины. Есть ли способ обойти мою проблему, например, использовать списки или функцию .any ()? Любая помощь приветствуется.

5
задан Brian Tompsett - 汤莱恩 17 March 2017 в 10:01
поделиться