Как получить индекс строки из нескольких условий? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть такой массив:

1.000000000000000000e+00    1.520566339739816631e-37
1.000000000000000000e+00    1.147965053727746877e-34
1.000000000000000000e+00    1.372739777414123007e-34
1.000000000000000000e+00    3.223982667840949347e-35
1.000000000000000000e+00    4.169420491209704059e-36
1.000000000000000000e+00    1.548157233879109404e-37
1.000000000000000000e+00    1.201472854896589573e-37
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00
1.000000000000000000e+00    0.000000000000000000e+00

Я хочу получить индекс строки с такими условиями:

  1. Первое условие - где значение первого столбца = 1 и значение второго столбца = 0. Которая начинается с 8-го столбца.

  2. Второе условие: если первое условие повторяется более 5 раз, то выводится индекс первой строки, который равен 8 (или в Python 7-я строка) .

1 Ответ

2 голосов
/ 06 мая 2020

1-й фильтрует весь индекс по первому критерию, а затем go по второму критерию.

arr:

array([[1. , 1.5],
       [1. , 1.1],
       [1. , 1.3],
       [1. , 3.2],
       [1. , 4.1],
       [1. , 1.5],
       [1. , 1.2],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ],
       [1. , 0. ]])

Попробуйте:

idx = np.min(np.where((arr[:,0]==1) & (arr[:,1] == 0)))
count = Counter(l for l in arr[idx:,0])
if count[1] > 5:
    print(idx)

Вывод:

7
...