我确定我要访问的范围存在,但是程序仍然显示错误。我正在尝试制作一个程序,该程序将汇总与另一列中的值相对应的一列中的值。
例如:
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
顺便说一句,在添加一些行(如i = i + 1,stucount = stu)之前,没有显示此错误,但现在显示的是即使发生的情况相同。
答案 0 :(得分:4)
该错误是因为循环结束后,您没有将最后一个学生的评估值添加到sumc
列表中。因此,对于n
个唯一的学生ID,列表长度仅为n-1
。在for
循环之后,添加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)
答案 1 :(得分:3)
将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)
输出将有所不同,并相应地进行更改。...错误将被消除
答案 2 :(得分:3)
在这里,我只是按照您的初步问题陈述来说明您拥有的东西和想要得到的东西。
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
这是您要找的吗?
答案 3 :(得分:2)
我认为您应该在错误行i=i+1
之后添加a.append(sumc[i])
。
因为在您的代码中,可能最终超出列表范围。