Python 根据条件选择两个不同列组合上的所有重复项

Python 根据条件选择两个不同列组合上的所有重复项,python,pandas,dataframe,Python,Pandas,Dataframe,我的数据框架如下所示: A_key t_num r_num o_st 292 A1 16 TS Q 812 A1 16 TS Q 173 A5 15 TT Q 955 A7 19 TQ Q 804 A7 17 TR Q 49 A7 18 T

我的数据框架如下所示:

     A_key     t_num    r_num  o_st 
292  A1         16       TS      Q
812  A1         16       TS      Q
173  A5         15       TT      Q
955  A7         19       TQ      Q
804  A7         17       TR      Q
49   A7         18       TQ      Q
668  A1         28       None    P 
788  A4         88       None    P 
693  A7         17       TS      Q
781  A1         22       None    P
我想选择所有不同的行作为o_st='p'的_键和t_num的唯一组合,并选择所有不同的行作为o_st='Q'的_键和r_num的唯一组合,以进入一个新的数据帧。感谢您的回复

预期的df如下所示

   A_key     t_num    r_num  o_st 
292  A1         16       TS      Q
173  A5         15       TT      Q
955  A7         19       TQ      Q
804  A7         17       TR      Q
668  A1         28       None    P 
788  A4         88       None    P 
693  A7         17       TS      Q
781  A1         22       None    P
其中
+
删除重复项



您有两个不同的子集,需要根据第三列的值检查其唯一性。我没有两次调用
drop\u duplicates
,而是在一次调用
drop\u duplicates
之前创建了一个包含正确子集值的掩码。

您关心在最终数据帧中维护的顺序吗?@user3483203-不,只要我拥有所有的数据顺序就行了
df['key'] = df['t_num'].where(df['o_st'].eq('P'), df['r_num'])

df.drop_duplicates(subset=['A_key', 'key']).drop('key', 1)
    A_key  t_num r_num o_st
292    A1     16    TS    Q
173    A5     15    TT    Q
955    A7     19    TQ    Q
804    A7     17    TR    Q
668    A1     28  None    P
788    A4     88  None    P
693    A7     17    TS    Q
781    A1     22  None    P