Python 删除类似列的数值匹配项

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

对于下面的pandas数据帧,我想删除
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
  • 对于
    维度
    diff
    上一行,检查其中是否有任何两行位于[-1,1]
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中的示例行。非常感谢。