【问题标题】:Drop similar column numerical value match pandas删除相似列数值匹配熊猫
【发布时间】:2021-04-10 07:00:59
【问题描述】:

对于下面的 pandas 数据框,我想删除 videoview 值相等的所有行,并且四列中的两列 left, width, top, height 在彼此的 +-1 范围内。所以在下面的例子中,第二行 (width, height) 是 (20, 14),第三行 (width, height) 是 (21, 15),所以这两行之一应该被删除,因为这些行共享widthheight 列中的 +-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
...

谢谢!

【问题讨论】:

  • 什么是row1和row2?请添加预期输出
  • 请输入一个简单的输入和一个示例输出
  • row1 和 row2 是 df 中的样本行。谢谢。

标签: python pandas numpy machine-learning data-science


【解决方案1】:

创建两个掩码:

  • 对于viewvideo:使用.shift+.eq 检查上一行是否相同
  • 对于dimensions: diff 上一行并检查其中是否有两个在[-1,1]中

col1_2_mask = df[["view","video"]].shift(1).eq(df[["view","video"]]).sum(1)<2
lwth_mask = df.iloc[:,2:].diff().isin(range(-1,2)).sum(1)<2
df[col1_2_mask | lwth_mask]

【讨论】:

    【解决方案2】:

    不知道这是否足够准确。它不一定会削减 1 秒内的所有实例,但一些小的调整就可以了。另外,我有点假设您更关心“宽度/高度”和“左/顶部”分组,而不是这四个组合中的任何组合。无论如何,您只需要为您真正关心的任何组重新执行此转换,直至所有排列。为了简洁起见,我省略了“左/上”分组,但这只是重复。

    > 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
    

    【讨论】:

      猜你喜欢
      • 2018-08-03
      • 1970-01-01
      • 2019-05-01
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      • 2022-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多