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

时间:2019-01-16 20:20:39

标签: 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       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'为A_key和t_num的唯一组合选择所有不同的行,为o_st ='Q'为A_key和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

1 个答案:

答案 0 :(得分:1)

where + drop_duplicates

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

您有两个不同的子集要根据第三列的值检查唯一性。我创建了一个包含正确子集值的掩码,而不是一次调用drop_duplicates两次。