IndexError:在python中,即使存在范围,列表索引也超出范围

IndexError:在python中,即使存在范围,列表索引也超出范围,python,pandas,numpy,Python,Pandas,Numpy,我确信我试图访问的范围存在,但程序仍然显示错误。我正在尝试制作一个程序,将一列中的值与另一列中的值相加 例如: 28400 4 28400 34 28400 9 65478 2 65478 5 65478 3 我的程序将做的是,它将加上4,34和9,然后加上2,5和3,然后是输出- 47 47 47 10 10 10 我正在从CSV文件导入数据。下面是代码- import

我确信我试图访问的范围存在,但程序仍然显示错误。我正在尝试制作一个程序,将一列中的值与另一列中的值相加

例如:

   28400    4
   28400    34 
   28400    9
   65478    2
   65478    5
   65478    3
我的程序将做的是,它将加上4,34和9,然后加上2,5和3,然后是输出-

   47
   47
   47
   10
   10
   10  
我正在从CSV文件导入数据。下面是代码-

    import pandas as pd
    import numpy as np

    assessment = pd.read_csv('/home/user/Documents/MOOC dataset original/studentVle2.csv')


    assessment = assessment.values

    count=0
    stucount=28400
    sumc=[]
    i=0
    for stu in assessment[:,2:3]:
        if(stucount==stu):
            count = count + assessment[i,5]
            i=i+1
        else:
            sumc.append(count)
            count = 0
            count = count + assessment[i,5]
            i=i+1
        stucount=stu

    #print(sumc)

    stucount=28400
    i=0
    a=[]
    for stu in assessment[:,2:3]:
        if(stucount==stu):
            a.append(sumc[i])
            stucount = stu
        else:
            i=i+1
            a.append(sumc[i])
            stucount = stu

    print(a)
错误:

        File "/home/user/Documents/final project files/test.py", line 36, in <module>
        a.append(sumc[i])
        IndexError: list index out of range
文件“/home/user/Documents/final project files/test.py”,第36行,在
a、 追加(sumc[i])
索引器:列表索引超出范围

顺便说一句,在添加一些行之前,比如i=i+1,stucount=stu,这个错误没有显示出来,但是现在它显示出来了,即使发生的事情是一样的。

我想你应该在错误行
a.append(sumc[i])
之后添加
i=i+1

因为在您的代码中,最后可能超出列表的范围。

i=i+1
放在
stucount=stu
下面,然后重试

import pandas as pd
import numpy as np

assessment = pd.read_csv('/home/user/Documents/MOOC dataset original/studentVle2.csv')


assessment = assessment.values

count=0
stucount=28400
sumc=[]
i=0
for stu in assessment[:,2:3]:
    if(stucount==stu):
        count = count + assessment[i,5]
        i=i+1
    else:
        sumc.append(count)
        count = 0
        count = count + assessment[i,5]
        i=i+1
    stucount=stu

#print(sumc)

stucount=28400
i=0
a=[]
for stu in assessment[:,2:3]:
    if(stucount==stu):
        a.append(sumc[i])
        stucount = stu
    else:
        a.append(sumc[i])
        stucount = stu
        i=i+1

print(a)
输出将不同,并相应更改…错误将被删除


在这里,我只是看一下你最初的问题陈述,你有什么,你想得到什么

df = pd.DataFrame([[28400,4],
                   [28400,34],
                   [28400,9],
                   [65478,2],
                   [65478,5],
                   [65478,3]], columns=list('AB'))
sums = df.groupby('A').B.sum()
df.A.map(sums)
你得到了什么

0    47
1    47
2    47
3    10
4    10
5    10
Name: A, dtype: int64

这就是你要找的吗?

错误是因为你没有在循环结束后为最后一个学生的
sumc
列表中添加评估值。因此,对于
n
唯一的学生id,列表长度仅为
n-1
。在循环的
之后,添加
sumc.append(count)
。见下文

assessment = assessment.values

count=0
stucount=28400
sumc=[]
i=0
for stu in assessment[:,2:3]:
    if(stucount==stu):
        count = count + assessment[i,5]
        i=i+1
    else:
        sumc.append(count)
        count = 0
        count = count + assessment[i,5]
        i=i+1
    stucount=stu

sumc.append(count)
print(sumc)

stucount=28400
i=0
a=[]
for stu in assessment[:,2:3]:
    if(stucount==stu):
        a.append(sumc[i])
        stucount = stu
    else:
        a.append(sumc[i])
        stucount = stu
        i=i+1

print(a)

把i=i+1放在stucount=stu下面,然后试着这样做,我想在a.append(sumc[i])之前在elseYes中增加i…就是这样。它工作了吗,看看我给你的例子,你可以从
-1
中初始化
I
,``I=-1a=[]对于评估中的stu[:,2:3]:if(stucount==stu):I=I+1a.append(sumc[I])stucount=stu-else:I=I+1a.append(sumc[I])stucount=stu-print(a)“是的,这能行。但我不明白我的代码中发生了什么。为什么它在范围内时显示超出范围此代码不跳过将最后一个学生id的评估分数总和添加到sumc中吗?