В переменной Python указаны способы ссылки на объекты, а не имена объектов. Нелегко перейти от объекта к переменной. Также при работе с несколькими объектами более естественно помещать их в списки или словари, а не назначать их переменным.
Я думаю, что это делает ту же классификацию:
In [95]: SOC = np.array([1, 2, 2, 3, 3, 4])
...: SOR = np.array([6, 2, 3, 1, 2, 1])
In [96]: items = list(zip(SOC,SOR))
In [97]: items
Out[97]: [(1, 6), (2, 2), (2, 3), (3, 1), (3, 2), (4, 1)]
In [98]: result = [[] for _ in range(4)]
...: for n,i in enumerate(items):
...: if i[0]>3 and i[1]>3:
...: result[0].append((n,i))
...: if i[0]>3 and i[1]<=3:
...: result[1].append((n,i))
...: if i[0]<=3 and i[1]<=3:
...: result[2].append((n,i))
...: if i[0]<=3 and i[1]>3:
...: result[3].append((n,i))
...:
In [99]: result
Out[99]:
[[],
[(5, (4, 1))],
[(1, (2, 2)), (2, (2, 3)), (3, (3, 1)), (4, (3, 2))],
[(0, (1, 6))]]
result
можно преобразовать в символы с:
In [100]: np.array(list('ABCDEF'))
Out[100]: array(['A', 'B', 'C', 'D', 'E', 'F'], dtype='<U1')
In [101]: [[np.array(list('ABCDEF'))[x[0]] for x in y] for y in result]
Out[101]: [[], ['F'], ['B', 'C', 'D', 'E'], ['A']]
или непосредственно в первом цикле:
In [102]: result = [[] for _ in range(4)]
...: for n,i in enumerate(items):
...: if i[0]>3 and i[1]>3:
...: result[0].append('ABCDEF'[n])
...: if i[0]>3 and i[1]<=3:
...: result[1].append('ABCDEF'[n])
...: if i[0]<=3 and i[1]<=3:
...: result[2].append('ABCDEF'[n])
...: if i[0]<=3 and i[1]>3:
...: result[3].append('ABCDEF'[n])
...:
...:
In [103]: result
Out[103]: [[], ['F'], ['B', 'C', 'D', 'E'], ['A']]