Python 删除类似列的数值匹配项
对于下面的pandas数据帧,我想删除Python 删除类似列的数值匹配项,python,pandas,numpy,machine-learning,data-science,Python,Pandas,Numpy,Machine Learning,Data Science,对于下面的pandas数据帧,我想删除video和view值相等且四列中的两列left、width、top、height彼此在+-1范围内的所有行。因此,在下面的示例中,第二行(宽度,高度)是(20,14),第三行(宽度,高度)是(21,15),因此应该删除这两行中的一行,因为这些行在width和height列中共享+-1值 view video left width top height Endzone 57906_000718
video
和view
值相等且四列中的两列left、width、top、height
彼此在+-1范围内的所有行。因此,在下面的示例中,第二行(宽度,高度)是(20,14),第三行(宽度,高度)是(21,15),因此应该删除这两行中的一行,因为这些行在width
和height
列中共享+-1值
view video left width top height
Endzone 57906_000718_Endzone.mp4 372 17 279 17
Endzone 57906_000718_Endzone.mp4 851 20 273 14
Endzone 57906_000718_Endzone.mp4 853 21 271 15
Endzone 57906_000718_Endzone.mp4 855 21. 267 16
Endzone 57906_000718_Endzone.mp4 857 21. 265 17
Sideline 57906_000718_Sideline.mp4 763 18. 98 26
...
样本输出,根据移除方法,输出可能会有所不同:
view video left width top height
Endzone 57906_000718_Endzone.mp4 372 17 279 17
Endzone 57906_000718_Endzone.mp4 851 20 273 14
Endzone 57906_000718_Endzone.mp4 857 21. 265 17
Sideline 57906_000718_Sideline.mp4 763 18. 98 26
...
谢谢大家! 我不知道这是否足够准确。它不一定会剪切1秒内的所有实例,但是一些小的调整就可以了。另外,我假设您更关心“宽度/高度”和“左/顶”分组,而不是四个组合。不管怎样,您只需对您真正关心的任何组重新执行此转换,直到所有排列。为了简洁起见,我省略了“left/top”分组,但这只是重复
> df[df.index.isin(df[['view', 'video']].join(df[['width', 'height']]//2).drop_duplicates().index)
view video left width top height
0 Endzone 57906_000718_Endzone.mp4 372 17.0 279 17
1 Endzone 57906_000718_Endzone.mp4 851 20.0 273 14
3 Endzone 57906_000718_Endzone.mp4 855 21.0 267 16
5 Sideline 57906_000718_Sideline.mp4 763 18.0 98 26
我不知道这是否足够准确。它不一定会剪切1秒内的所有实例,但是一些小的调整就可以了。另外,我假设您更关心“宽度/高度”和“左/顶”分组,而不是四个组合。不管怎样,您只需对您真正关心的任何组重新执行此转换,直到所有排列。为了简洁起见,我省略了“left/top”分组,但这只是重复
> df[df.index.isin(df[['view', 'video']].join(df[['width', 'height']]//2).drop_duplicates().index)
view video left width top height
0 Endzone 57906_000718_Endzone.mp4 372 17.0 279 17
1 Endzone 57906_000718_Endzone.mp4 851 20.0 273 14
3 Endzone 57906_000718_Endzone.mp4 855 21.0 267 16
5 Sideline 57906_000718_Sideline.mp4 763 18.0 98 26
创建两个遮罩:
- 对于
和视图
:使用视频
+.shift
.eq
- 对于
:维度
上一行,检查其中是否有任何两行位于[-1,1]diff
col1_2_mask=df[[“视图”,“视频”]]。shift(1)。eq(df[[“视图”,“视频”])。求和(1)创建两个掩码:
- 对于
视图
和视频
:使用.shift
+.eq
- 对于
维度
:diff
上一行,检查其中是否有任何两行位于[-1,1]
col1_2_mask=df[[“视图”,“视频”]]。shift(1)。eq(df[[“视图”,“视频”]])。求和(1)第1行和第2行是什么?请添加预期的输出请输入一个简单的输入和一个示例outputrow1和row2是df中的示例行。谢谢。第1排和第2排是什么?请添加预期的输出请输入一个简单的输入和一个示例outputrow1和row2是df中的示例行。非常感谢。