用于有条件地提取重复项的Python代码

Seu*_*ung 2 python duplicates pandas

假设我们有以下数据框:

   group    id  performance
0   exp      A   1
1   exp      B   2
2   exp      B   3
3   exp      C   4
4   control  A   5
5   control  A   6
6   exp      D   7
7   control  D   8   
Run Code Online (Sandbox Code Playgroud)

仅提取行以便在“ exp”和“ control” 中存在至少一个“ id”的Python代码是什么?

以下是所需的输出:

   group    id  performance
0   exp      A   1
4   control  A   5
5   control  A   6
6   exp      D   7
7   control  D   8  
Run Code Online (Sandbox Code Playgroud)

以下代码用于创建此数据框:

students = [('exp', 'A', 1),
            ('exp', 'B', 2),
            ('exp', 'B', 3),
            ('exp', 'C', 4),
            ('control', 'A', 5),
            ('control', 'A', 6),
            ('exp', 'D', 7),
            ('control', 'D', 8)
            ]

import pandas as pd
student_df = pd.DataFrame(students, columns=['group', 'id', 'performance'])
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但它仅无条件地提取“ id”中的所有重复项。我的猜测是添加一个if语句?

student_df[student_df.duplicated(['id'], keep = False)]
Run Code Online (Sandbox Code Playgroud)

And*_* L. 5

尝试这个。根据您的样本数据列,group该列只有2个值,exp并且control

df_out = student_df.groupby('id').filter(lambda x: x.group.nunique() > 1)

Out[570]:
     group id  performance
0      exp  A            1
4  control  A            5
5  control  A            6
6      exp  D            7
7  control  D            8
Run Code Online (Sandbox Code Playgroud)