Вот мое решение. Я старался избегать использования if-else
и сделать решение более гибким.
Основная идея - создать DataFrame
из labels
с их минимальными и максимальными значениями, а затем найти правильную метку для каждого значения оценки .
Код:
import pandas as pd
class Label(object):
name = ''
min = 0
max = 100
def __init__(self, name, min, max):
self.name = name
self.min = min
self.max = max
def data(self):
return [self.name, self.min, self.max]
class Labels:
labels = [
Label('Bad', 0, 7).data(),
Label('Good', 7, 8).data(),
Label('Very good', 8, 100).data()]
labels_df = pd.DataFrame(labels, columns=['Label', 'Min', 'Max'])
def get_label(score):
lbs = Labels.labels_df
tlab = lbs[(lbs.Min <= score) & (lbs.Max > score)]
return tlab.Label.values[0]
class edu:
hs = 'High School'
b = 'Bachelors'
m = 'Master'
df = pd.DataFrame({
'ID': range(6),
'Education': [edu.hs, edu.b, edu.hs, edu.hs, edu.b, edu.m],
'Score': [7.884, 6.952, 8.185, 6.556, 6.347, 6.794]})
df['Label'] = df.apply(lambda row: Labels.get_label(row['Score']), axis=1)
print(df)
Выход:
ID Education Score Label
0 0 High School 7.884 Good
1 1 Bachelors 6.952 Bad
2 2 High School 8.185 Very good
3 3 High School 6.556 Bad
4 4 Bachelors 6.347 Bad
5 5 Master 6.794 Bad