Я работаю над оценкой качества записей в базе данных. У меня есть CSV, который в двоичном виде говорит мне, отсутствует ли конкретное поле для каждой записи. Моя цель состоит в том, чтобы создать оценку путем присвоения различных весов для полей, а затем рассчитать окончательную оценку 1 - 100. Ниже приведено визуальное представление того, с чем я работаю. Два верхних ряда - это весовые коэффициенты, а 3-й ряд - это то, что есть в моем df.
Мне удалось выполнить вычисления, сопоставив 1 и 0 с весами, используя numpy.where (), записав результаты в отдельные столбцы и вычислив баллы с использованием новых столбцов. Мне было интересно, если есть более эффективный способ сделать это. Мой код ниже (я сократил лишние части, чтобы сэкономить место)
df = pd.read_csv(path, names=names, usecols=usecols, header=None)
# Main Scoring Weights
contact_info_weight = 0.5
relations_weight = 0.25
demos_weight = 0.25
# Scoring Sub Rations - contact_info
org_address_rate = 30
org_city_rate = 30
.......other.....
# Scoring Sub Rations - relations
related_ind_rate = 40
related_org_rate = 20
related_pc_rate = 50
# Scoring Sub Rations - demos
org_type_rate = 40
market_segment_rate = 30
process_rate = 30
# Create new columns with score values
df['Org Address Line 1 Score'] = np.where(df['Org Address Line 1'] == 1, org_address_rate, 0)
df['Org City Score'] = np.where(df['Org City'] == 1, org_city_rate, 0)
.......other.....
# Calculate total sub scores
df['Contact Info Score'] = df['Org Address Line 1 Score'] + df['Org City Score'] + df['Org State Score'] + \
df['Org Postal Code Score'] + df['Org Country Score'] + df['Org Phone Score']
df['Demos Score'] = df['Org Type Score'] + df['Market Segment Score'] + df['Process Score']
df['Relations Score'] = df['Ind ID Score'] + df['Market Segment Score'] + df['Process Score']
# Calculate final score
df['Completeness Score'] = (df['Contact Info Score'] * contact_info_weight) + (df['Demos Score'] * demos_weight) + \
(df['Relations Score'] * relations_weight)