Хорошо, я предполагаю, что вы хотите получить определенное значение из вашей матрицы в зависимости от двух входных значений l и w, поэтому, если l находится между 0 и 1, следует выбрать столбец «A».(Далее я предполагаю, что если l находится между 1 и 2, это столбец «B», 2 <= l <3 -> «c» и т. Д.). Строка напрямую получается из w с данными вmesafe-column: если w - от 0 до 100 -> строка 0, от 100 до 1000 -> строка 1 и т. д. *
Что ж, это можно сделать следующим образом:
l = .3 # let's say user types 0.3
Существует некоторое сопоставление между l и буквами:
l_mapping = [1, 5, 12, 20, 35, 50] # These are the thresholds between the columns A...F
l_index = np.searchsorted(l_mapping, l) # calculate the index of the column letter
col = df.columns[1:][l_index] # this translates l to the column names from A...F
col # look what col is when l was < 1
Out: 'A'
w = 42 # now the user Input for w is 42
row = np.searchsorted(df.mesafe.values, w) # this calculates the fractional index of w in df.mesafe
row
Out: 0
Итак, с этими двумя формулами вы получаете информацию столбца и строки для индексации желаемого результата:
df[col].iloc[row]
Out: 23
Суммированиевсе это в функции будет выглядеть так:
def get_l_y(l, w, df_ly):
l_mapping = [1, 5, 12, 20, 35, 50]
l_index = np.searchsorted(l_mapping, l)
col = df_ly.columns[1:][l_index]
row = np.searchsorted(df.mesafe.values, w)
print(l, w, col, row) # print Input and calculated row- and column- values for testing purpose, can be deleted/commented out if everything works as you want
return df[col].iloc[row]
Эта функция ожидает l, w и pandas-dataframe вашей матрицы в качестве входных параметров и возвращает l_y.