Как присваивать значения на основе интервала в Pandas

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь присвоить значение столбцу фрейма данных на основе значения, которое находится МЕЖДУ двумя значениями другого фрейма данных:

 intervals = pd.DataFrame(columns = ['From','To','Value'], data = [[0,100,'A'],[100,200,'B'],[200,500,'C']])
print('intervalsn',intervals,'n')

points = pd.DataFrame(columns = ['Point', 'Value'], data = [[45,'X'],[125,'X'],[145,'X'],[345,'X']])
print('pointsn',points,'n')

DesiredResult = pd.DataFrame(columns = ['Point', 'Value'], data = [[45,'A'],[125,'B'],[145,'B'],[345,'C']])
print('DesiredResultn',DesiredResult,'n')
  

введите описание изображения здесь

Большое спасибо

Ответ №1:

Давайте map сначала создадим ряд, используя pd.IntervalIndex from_arrays метод with:

 intervals = intervals.set_index(pd.IntervalIndex.from_arrays(intervals['From'], 
                                                             intervals['To']))['Value']

points['Value'] = points['Point'].map(intervals)
  

Вывод:

    Point Value
0     45     A
1    125     B
2    145     B
3    345     C
  

Ответ №2:

Другой подход:

 def calculate_value(x):
    return intervals.loc[(x >= intervals['From']) amp; (x < intervals['To']), 'Value'].squeeze()

desired_result = points.copy()
desired_result['Value'] = desired_result['Point'].apply(calculate_value)