我有如下所示的数据框:
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
答案 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
两次。