对于下面的pandas数据框,我想删除所有video
和view
值相等且四列中的两列left, width, top, height
值在正负1范围内的行。因此,在下面的示例中,第二行(width, height)为(20, 14),第三行(width, height)为(21, 15),因此这两行中的一行应该被删除,因为这些行在width
和height
列中共享正负1的值。
view video left width top heightEndzone 57906_000718_Endzone.mp4 372 17 279 17Endzone 57906_000718_Endzone.mp4 851 20 273 14Endzone 57906_000718_Endzone.mp4 853 21 271 15Endzone 57906_000718_Endzone.mp4 855 21. 267 16Endzone 57906_000718_Endzone.mp4 857 21. 265 17Sideline 57906_000718_Sideline.mp4 763 18. 98 26...
示例输出,输出可能因删除方法而异:
view video left width top heightEndzone 57906_000718_Endzone.mp4 372 17 279 17Endzone 57906_000718_Endzone.mp4 851 20 273 14Endzone 57906_000718_Endzone.mp4 857 21. 265 17Sideline 57906_000718_Sideline.mp4 763 18. 98 26...
谢谢!
回答:
不知道这是否足够准确。它并不一定能切掉所有在1秒内的实例,但一些小的调整就能解决问题。此外,我有点假设你更关心“width/height”和“left/top”的分组,而不是这四个的任何组合。不管怎样,你只需要针对你真正关心的任何组重复进行这种转换,直到所有排列组合。对于简洁起见,我省略了“left/top”的分组,但它只是这个的重复。
> df[df.index.isin(df[['view', 'video']].join(df[['width', 'height']]//2).drop_duplicates().index) view video left width top height0 Endzone 57906_000718_Endzone.mp4 372 17.0 279 171 Endzone 57906_000718_Endzone.mp4 851 20.0 273 143 Endzone 57906_000718_Endzone.mp4 855 21.0 267 165 Sideline 57906_000718_Sideline.mp4 763 18.0 98 26