pandas dataframe的行和列之间的Python交互

时间:2017-03-11 16:25:38

标签: python pandas

我有这个数据框:

insert

我需要为每个学生找到参加相同考试的学生人数。

它应该是这样的:

insert

学生A的总数是1,因为它只与一名学生(在这种情况下是学生C)进行普通考试。

学生B的总人数为1,因为它只与一名学生进行普通考试(在这种情况下是学生C)。

学生C的总数是2,因为它与两名学生(学生A和B)都有共同考试。

有什么想法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

您可以首先计算examstudent的列联表,然后进行交叉产品检查学生之间是否有任何重叠考试,并计算至少有学生人数一次分享考试,并将结果映射到原始学生专栏:

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

enter image description here