熊猫在有条件的情况下放置重复项

时间:2020-03-30 09:56:34

标签: python pandas

我想df.drop_duplicates()基于子集,但也忽略列是否具有特定值。

例如...

                 v1      v2     v3      
ID                                                          
148         8751704.0    G      dog   
123         9082007.0    G      dog  
123         9082007.0    G      dog 
123         9082007.0    G      cat   

我想删除重复的[ID, v1],但是忽略v3是否等于cat,所以是这样的:

full_df.drop_duplicates([ID, v1], inplace=True, conditional=exclude v3 = cat)

有意义的希望

2 个答案:

答案 0 :(得分:6)

boolean indexingSeries.duplicatedpd.Index.duplicated结合使用:

df[~(df['v1'].duplicated() & df.index.duplicated()) | df['v3'].eq('cat')]

输出

            v1 v2   v3
ID                    
148  8751704.0  G  dog
123  9082007.0  G  dog
123  9082007.0  G  cat

如果ID不是索引:

df[~df[['ID', 'v1']].duplicated() | df['v3'].eq('cat')]

答案 1 :(得分:5)

您可以按位使用另一个条件,并确保cat不是cat

df[~(df.reset_index().duplicated(['ID', 'v1']) & df.v3.ne('cat').values).values]

        v1     v2   v3
148  8751704.0  G  dog
123  9082007.0  G  dog
123  9082007.0  G  cat