基于具有布尔索引的匹配列值删除重复项



合并两个DF后,我有以下数据集:

y_val407
DB_ID x_val
x01 405
x01 405 405
x02 308 306
x02 308 308
x03 658 658
x03 658 660
x04 658
x04 660
x05 658 660
x06 660 660

想法是比较两列是否不相等,然后按DB_ID:排序并重新保存重复项

df = (df.assign(new = df['x_val'].ne(df['y_val']))
.sort_values(['DB_ID','new'])
.drop_duplicates('DB_ID')
.drop('new', axis=1))
print (df)
DB_ID x_val y_val
1   x01   405   405
3   x02   308   308
4   x03   658   658
6   x04  None   658
8   x05   658   660
9   x06   660   660

如果需要相等的NaNs或Nones,请使用:

df = (df.assign(new = df['x_val'].fillna('same').ne(df['y_val'].fillna('same')))
.sort_values(['DB_ID','new'])
.drop_duplicates('DB_ID')
.drop('new', axis=1))

也许,您可以简单地使用:

df = df[df['x_val'] == df['y_val']]
print(df)
# Output
DB_ID  x_val  y_val
1   x01    405    405
3   x02    308    308
4   x03    658    658

我认为你不需要drop_duplicatesduplicated,但如果你想确保每个DB_ID只剩下一个实例,你可以附加.drop_duplicates('DB_ID')

df = df[df['x_val'] == df['y_val']].drop_duplicates('DB_ID')
print(df)
# Output
DB_ID  x_val  y_val
1   x01    405    405
3   x02    308    308
4   x03    658    658

相关内容

  • 没有找到相关文章

最新更新