我有这个数据框:
insert
我需要为每个学生找到参加相同考试的学生人数。
它应该是这样的:
insert
学生A的总数是1,因为它只与一名学生(在这种情况下是学生C)进行普通考试。
学生B的总人数为1,因为它只与一名学生进行普通考试(在这种情况下是学生C)。
学生C的总数是2,因为它与两名学生(学生A和B)都有共同考试。
有什么想法吗?
提前谢谢!
答案 0 :(得分:2)
您可以首先计算exam
和student
的列联表,然后进行交叉产品检查学生之间是否有任何重叠考试,并计算至少有学生人数一次分享考试,并将结果映射到原始学生专栏:
cont_table = pd.crosstab(df.exam, df.student)
# cont_table.T.dot(cont_table) gives a table how many exams each student shared with
# another student, -1 to exclude the student himself
shared_count = (cont_table.T.dot(cont_table) != 0).sum(0) - 1
shared_count
#student
#a 1
#b 1
#c 2
#dtype: int64
df['total_st'] = df.student.map(shared_count)
df