我想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)
有意义的希望
答案 0 :(得分:6)
将boolean indexing
与Series.duplicated
和pd.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