首页 > 解决方案 > 用于有条件地提取重复项的 Python 代码

问题描述

假设我们有以下数据框:

   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   

仅提取行以使“exp”和“控件” 中存在至少一个“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  

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

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'])

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

student_df[student_df.duplicated(['id'], keep = False)]

标签: pythonpandasduplicates

解决方案


尝试这个。基于您的示例数据列group只有 2 个值expcontrol

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

推荐阅读