Есть ли способ выбрать строку в двумерном массиве с условиями для каждого столбца в строке? - PullRequest
0 голосов
/ 12 мая 2019

Я пытаюсь выбрать одну строку из двумерного массива.Этот выбор основан на условиях значения в столбцах строки.

В качестве примера это мой 2D-массив:

| V1  | V2  | V3 | V4  | Q1 | Q2  |
|-----|-----|----|-----|----|-----|
| 0.1 | 0.5 | 3  | 7   | 5  | 10  |
| 0.3 | 0.8 | 4  | 5   | 15 | 20  |
| 2   | 15  | 6  | 0.5 | 1  | 0.5 |

В этой таблице может быть около 5000 или более строк, и если у меня есть значения всех V1, V2, V3,V4 Я хочу посмотреть в этом массиве и найти Q1 и Q2.

Так что, если у меня есть:

V1 = 0.3
V2 = 0.8
V3 = 4
v4 = 5

Я бы хотел, чтобы он возвращал полную строку или только значения Q:

Q1 = 15
Q2 = 20

Есть ли способ выбрать эти данные в строках?Я нашел решение онлайн с:

np.where((table[:,0] == V1) & (table[:,1] == V2) & (table[:,2] == V3) & (table[:,3] == V4))

Но с таким количеством записей время, которое занимает довольно много времени, есть ли способ сделать это быстрее?

1 Ответ

0 голосов
/ 12 мая 2019

Почему бы не преобразовать его в фрейм данных Pandas?Тогда имеем следующее:

import pandas as pd

ddict = {
    'V1':[0.1,0.3,2],
    'V2':[0.5,0.8,15],
    'V3':[3,4,6],
    'V4':[7,5,0.5,],
    'Q1':[5,15,1],
    'Q2':[10,20,0.5],
    }

df = pd.DataFrame(ddict)

### DataFrame.loc(<row>, <column>) will return values for the columns if the row conditions are met.
df.loc[(df['V1'] == 0.3) & (df['V2'] == 0.8) & (df['V3'] == 4) & (df['V4'] == 5), ['Q1','Q2']]

Вывод:

   Q1    Q2
1  15  20.0
...