【问题标题】:ValueError: Wrong number of items passed 2, placement implies 1ValueError:传递的项目数错误 2,位置暗示 1
【发布时间】:2020-01-30 21:11:45
【问题描述】:

表格如下:

问题: 在学科物理分类为0-10%范围内的误差的所有案例中,返回学生百分比大于或等于的值表BSchool1 中 95% 的学生百分比(基准) 错误范围 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

我想做的事:

我们与 B-Schools 建立了合作关系,并试图预测每个 B-Schools 学生的总体成绩。然后,我们尝试根据 0-10%、10-20% 等的桶对预测不准确的情况进行分类。例如,对于商学院 1 的物理,70% 的情况被正确识别,误差范围为 0- 10%、5% 的案例预测在 BSchool 1 中物理的误差在 10-20% 的范围内,依此类推。我们在 B-School 1 中的模型是成功的。所以我们希望看看我们现在可以定位哪些 B 学校。

但是我得到了如上所示的错误。

Value Error:Wrong number of items passed 2, placement implies 1 这对我没有帮助。请帮忙

【问题讨论】:

  • df['Qualifyinglist']=(df2[['Stu_perc']]>=0.95*benchmark_value) 这一行是错误的。您要分配给 Qualifyinglist 列什么?布尔值还是值?
  • Benchmark 的值如下:0 70(0 为索引) Stu_perc 具有以下值:0 70 1 60(0 和 1 为索引)。我希望将 Stu_perc 中的 70 和 60(数百万行的数据集中有两个以上的值,这只是一个简化版本)与 0.95*benchmark 值(这里的基准值为 70)进行比较。我希望返回如下内容: Qualifying List 0 70 1 NULL(因为 0.95*benchmark 是 66.5 而 60 不满足该标准)

标签: python pandas valueerror


【解决方案1】:
val=benchmark_value.iat[0]

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

这对我有用。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 2021-07-13
    • 2021-08-10
    • 2021-07-05
    • 2020-07-02
    • 1970-01-01
    • 2021-11-26
    • 2019-09-23
    • 2020-04-22
    相关资源
    最近更新 更多