ValueError: неверное количество элементов прошло 2, размещение подразумевает 1

Таблица выглядит так:

Вопрос. Из всех случаев, отнесенных к ошибке в диапазоне 0–10% для предметной физики, вернуть таблицу значений, где Процент учащихся больше или равен 95% процентного соотношения учащихся в BSchool1 (контрольный показатель) для диапазона ошибок 0–10% и предмета «Физика».

[IN]

import pandas as pd
data = [['B1', 'Grade_physics', '0-10%', 70],['B1', 'Grade_physics', '10-20%', 5],['B1', 'Grade_physics', '20-30%', 25],['B1', 'Grade_Maths', '10-20%', 20],['B1', 'Grade_Maths', '0-10%', 60],['B1', 'Grade_Maths', '20-30%',20 ],['B2', 'Grade_Maths', '0-10%', 50],['B2', 'Grade_Maths', '10-20%', 15],['B2', 'Grade_Maths', '20-30%', 35],['B2', 'Grade_physics', '10-20%', 30],['B2', 'Grade_physics', '0-10%', 60],['B2', 'Grade_physics', '20-30%',10 ]]
df = pd.DataFrame(data, columns = ['BSchool Name', 'Graded in','Error Bucket','Stu_perc'])
df 
     [OUT]
       BSchool Name      Graded in      Error Bucket  Stu_perc
    0            B1  Grade_physics             0-10%        70
    1            B1  Grade_physics            10-20%         5
    2            B1  Grade_physics            20-30%        25
    3            B1    Grade_Maths            10-20%        20
    4            B1    Grade_Maths             0-10%        60
    5            B1    Grade_Maths            20-30%        20
    6            B2    Grade_Maths             0-10%        50
    7            B2    Grade_Maths            10-20%        15
    8            B2    Grade_Maths            20-30%        35
    9            B2  Grade_physics            10-20%        30
    10           B2  Grade_physics             0-10%        60
    11           B2  Grade_physics            20-30%        10

[IN]:

#Subset of values where error bucket and subject are sliced
filter1 = df['Graded in'].str.contains('Grade_physics')
filter2=df['Error Bucket'].str.contains('0-10%')
df2 = df[filter1 & filter2]

#Compare the value of student percentage in sliced data to benchmark value 
#(in this case student percentage in BSchool1) 
filter3 = df2['BSchool Name'].str.contains('B1')
benchmark_value = df2[filter3]['Stu_perc']
df['Qualifyinglist']=(df2[['Stu_perc']]>=0.95*benchmark_value)
[OUT]:
ValueError: Wrong number of items passed 2, placement implies 1
[IN]:
df['Qualifyinglist']=(df2['Stu_perc']>=0.95*benchmark_value)
[OUT]:
ValueError: Can only compare identically-labeled Series objects

Что я пытаюсь сделать:

У нас есть связи с бизнес-школами, и мы пытаемся предсказать общую оценку учащихся в каждой бизнес-школе. Затем мы пытаемся классифицировать случаи, когда прогноз был неточным, на основе сегментов 0-10%, 10-20% и т. Д. Например, для Физики для бизнес-школы 1 70% случаев были идентифицированы правильно с ошибкой в ​​диапазоне от 0 до 10%, 5% случаев предсказания имели ошибку в диапазоне 10-20% для физики в BSchool 1 и так далее. Наша модель в B-School 1 оказалась успешной. Итак, мы хотим увидеть, на какие бизнес-школы мы можем ориентироваться сейчас.

Однако я получаю сообщение об ошибке, как показано выше.

Ошибка значения: неверное количество элементов прошло 2, размещение подразумевает 1 мне это не помогло. Пожалуйста помоги


person noob    schedule 01.10.2019    source источник
comment
df['Qualifyinglist']=(df2[['Stu_perc']]>=0.95*benchmark_value) эта строка неверна. Что вы должны отнести к столбцу Qualifyinglist? логическое значение или значение?   -  person Mayeul sgc    schedule 01.10.2019
comment
Бенчмарк имеет значение, как показано ниже: 0 70 (0 - индекс). Stu_perc имеет следующие значения: 0 70 1 60 (0 и 1 - индексы). Я хочу сравнить 70 и 60 в Stu_perc (в наборе данных из миллионов строк более двух значений, это просто упрощенная версия) с контрольным значением 0,95 * (здесь контрольное значение 70). Я хочу вернуть что-то вроде этого: Квалификационный список 0 70 1 NULL (поскольку тест 0,95 * равен 66,5, а 60 не удовлетворяет этим критериям)   -  person noob    schedule 02.10.2019


Ответы (1)


val=benchmark_value.iat[0]

df['Qualifyinglist']=df2['Stu_perc'].where(df2['Stu_perc']>=0.95*val)

Это сработало для меня.

person noob    schedule 02.10.2019