我有一个数据集,希望根据一些条件删除重复项。
例如,假设我有一个表格如下:
ID date group
3001 2010 DCM
3001 2012 NII
3001 2012 DCM
我希望你能查看ID列以寻找相似的ID,如果两个日期相似,则保留该组中的NII行。
因此,它将变为:
ID date group
3001 2010 DCM
3001 2012 NII
我有一个数据集,希望根据一些条件删除重复项。
例如,假设我有一个表格如下:
ID date group
3001 2010 DCM
3001 2012 NII
3001 2012 DCM
ID date group
3001 2010 DCM
3001 2012 NII
在这里使用 duplicated
来发挥杠杆作用:
df[~df.duplicated(['ID', 'date'], keep=False) | df['group'].eq('NII')]
ID date group
0 3001 2010 DCM
1 3001 2012 NII
在布尔数组上使用iloc
和argsort
。确保使用mergesort
进行排序,以确保不会发生不稳定的排序。
df.iloc[df.group.ne('NII').argsort(kind='mergesort')].drop_duplicates(['ID', 'date'])
ID date group
1 3001 2012 NII
0 3001 2010 DCM
['ID', 'date']
对的组中,带有'NII'
的行始终排在最前面。改为 Categorical
,然后使用 sort_values
+ drop_duplicates
。
df['group']=pd.Categorical(df['group'], ["NII", "DCM"])
df.sort_values('group').drop_duplicates(['ID', 'date'])
ID date group
1 3001 2012 NII
0 3001 2010 DCM
["NII", "DCM"]
替换为以下内容。["NII"]+df.group.loc[lambda x : x!='NII'].unique().tolist()
['NII', 'DCM']
您可以尝试按group
排序,它将首先具有DCM
值(默认为升序),然后在drop_duplicates
方法中使用subset
和keep
选项:
df.sort_values('group').drop_duplicates(subset=['ID','date'], keep='last')