Выполнение поиска на основе интервального индексирования, Pandas данных? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь создать простую систему, в которой система просит пользователя ввести возраст, ввести гарантированную сумму (или сумму, которую он / она хочет получить), а затем на основе этих данных система сообщит пользователю премию (или сумму), которую он должен заплатить.

До сих пор я был в состоянии позволить коду работать (несколько), однако моя проблема теперь перебирает все столбцы.

Это код:

import pandas as pd
#data = pd.read_csv("/Users/Noel/Desktop/Transition.csv")


data = {'5000': ['18.67','19.79','22.16','26.38','29.17'],
        '7500': ['20.07','21.28','23.82','28.36','31.99'],
        '10000': ['21.46', '22.76', '25.48', '30.33', '34.81']}

transition_table = pd.DataFrame(data, index=['18-25','26-30','31-35','36-40','41-45'])

print('Hello, welcome to Axe!')
age = int(input('Please enter the age of the Policyholder: '))
sum_assured = int(input('Please enter the Sum assured of the Policyholder: '))

if age >= 18 and age <= 25 and sum_assured == 5000:
        row0 = transition_table.iloc[0, 0]
        print(row0)

elif age >= 26 and age <=30 and sum_assured == 5000:
        col0 = transition_table.iloc[1, 0]
        print(col0)

print('A Policyholder of age ' + age + ' with a sum assured of ' + sum_assured + ' will pay a premium of ' )

Таким образом, когда я введу возраст 18 лет и гарантированную сумму 5000, я должен получить вывод: Страхователь 18 лет с гарантированной суммой 5000 заплатит премия 18,7

Если я введу возраст 27 и сумму 10000, я хочу получить вывод: Страхователь в возрасте 27 лет с гарантированной суммой 10000 заплатит премию 22,76

Полагаю, я должен использовать для l oop итерацию, но у меня возникли трудности.

1 Ответ

0 голосов
/ 30 марта 2020

Использование метода numpy digitize решило проблему. Этот метод отображает значение (или array значений) в ячейки, например, возраст 27 сопоставляется со вторым интервалом (индекса 1), код:

import pandas as pd
import numpy as np

data = {'5000': ['18.67','19.79','22.16','26.38','29.17'],
        '7500': ['20.07','21.28','23.82','28.36','31.99'],
        '10000': ['21.46', '22.76', '25.48', '30.33', '34.81']}

index = np.array([25, 30, 35, 40, 45])
transition_table = pd.DataFrame(data, index=index)

def get_value(age, sum_assured):
  row = np.digitize(age, transition_table.index, right=True)
  col = str(sum_assured)
  return transition_table.iloc[row, :][col]

Использование:

age = int(input("Enter age"))
sum_assured = input("Enter Sum Assured")
get_value(age, sum_assured)

Результат:

>>Enter age 27
>>Enter Sum Assured 10000
>>'22.76'

Надеюсь, это помогло, напишите комментарий, если что-то неясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...