数据帧中的Python交互

数据帧中的Python交互,python,pandas,Python,Pandas,我有以下数据帧: exam_id student semester 0 01 a 1 1 02 b 2 2 03 c 3 3 01 d 1 4 02 e 2 5 03 f 3 6 01 g 1 我想创建一个新的数据框架,其中包含四列:

我有以下数据帧:

   exam_id   student  semester
0     01        a        1
1     02        b        2
2     03        c        3
3     01        d        1
4     02        e        2
5     03        f        3
6     01        g        1
我想创建一个新的数据框架,其中包含四列:“学生”、“与之共享的考试”、“学期”、“共享考试的数量”

有什么建议吗

idx_cols = ['exam_id', 'semester']
std_cols = ['student_x', 'student_y']
d1 = df.merge(df, on=idx_cols)
d2 = d1.loc[d1.student_x != d1.student_y, idx_cols + std_cols]

d2.loc[:, std_cols] = np.sort(d2.loc[:, std_cols])

d3 = d2.drop_duplicates().groupby(
    std_cols + ['semester']).size().reset_index(name='count')

print(d3)

  student_x student_y semester  count
0         a         d        1      1
1         a         g        1      1
2         b         e        2      1
3         c         f        3      1
4         d         g        1      1
它的工作原理

  • 自我
    合并
    仅在
    学期
    考试id上
  • 摆脱自我分享
  • 对每行学生对进行排序,以便我们可以看到重复的组合
  • 放下那些复制品
  • 学生分组(包括学期,以便我们在结果中看到)
它的工作原理

  • 自我
    合并
    仅在
    学期
    考试id上
  • 摆脱自我分享
  • 对每行学生对进行排序,以便我们可以看到重复的组合
  • 放下那些复制品
  • 学生分组(包括学期,以便我们在结果中看到)

到底出了什么问题?@现在检查一下!您的colname是
exam\u id
,但在groupby中您使用
exam
。删除这个打印错误,代码就会工作。那么到底出了什么问题?@和平现在检查一下!您的colname是
exam\u id
,但在groupby中您使用
exam
。删除这个印刷错误,代码就会工作。伟大的解决方案!谢谢伟大的解决方案!谢谢
idx_cols = ['exam_id', 'semester']
std_cols = ['student_x', 'student_y']
d1 = df.merge(df, on=idx_cols)
d2 = d1.loc[d1.student_x != d1.student_y, idx_cols + std_cols]

d2.loc[:, std_cols] = np.sort(d2.loc[:, std_cols])

d3 = d2.drop_duplicates().groupby(
    std_cols + ['semester']).size().reset_index(name='count')

print(d3)

  student_x student_y semester  count
0         a         d        1      1
1         a         g        1      1
2         b         e        2      1
3         c         f        3      1
4         d         g        1      1