• 关于#python#的问题:二维数组去重保留最后一行满足条件的数据(相关搜索:数组去重)


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 zckui 2024-08-09 14:58 采纳率: 75% 浏览 22 首页/ 编程语言 / 关于#python#的问题:二维数组去重保留最后一行满足条件的数据(相关搜索:数组去重) python数据结构性能优化 在python中有个二维的np.array数据,数组中有很多重复的数据,需要对数组根据第一列和最后一列去重处理,保留最后一行满足条件的数据,示例数据如下,一个二维数据,有5行13列,实际运用中行数可能会到60万条左右 data_array = np.array([[1050364, 13, 15, 18, 2, 2195, 3.22, 2800, 0, 0, 1, 1, 7301], [3562, 13, 14, 25, 1, 2829, 20.62, 200, 0, 0, 1, 1, 1081], [1050364, 13, 15, 18, -2, 2195, 3.22, 2800, 0, 0, 0, 1, 7301], [3562, 13, 14, 25, 1, 2829, 20.62, 200, 20.62, 200, 0, 1, 1081], [1050368, 13, 19, 7, 1, 2551, 2.56, 1000, 0, 0, 0, 1, 7301], [3568, 13, 20, 4, 1, 2048, 5.18, 2500, 5.19, 2500, 0, 10, 1081]]) 数组中有很多过时或者重复的数据,需要对数组去重处理,根据第一列和最后一列去重处理,第一列和最后一列相同的数据保留最后一行,处理后的结果如下: result_array = np.array([[1050368, 13, 19, 7, 1, 2551, 2.56000, 1000, 0, 0, 0, 1, 7301], [1050364, 13, 15, 18, -2, 2195, 3.22000, 2800, 0, 0, 0, 1, 7301], [3562, 13, 14, 25, 1, 2829, 20.62000, 200, 20.62000, 200, 0, 1, 1081], [3568, 13, 20, 4, 1, 2048, 5.18000, 2500, 5.19000, 2500, 0, 10, 1081]]) 结果中,数组的第一列和最后一列都是唯一的,python中有什么算法或者第三方库能够满足这种处理需求? 现在我找到一个python第三方库“numpy_indexed”,去重处理的代码如下: import numpy_indexed as npi group_index, result_array = npi.group_by(data_array[:, [-1, 0]]).last(data_array) 使用“numpy_indexed”库中的group_by和last方法可以得到正确的结果,数据量少时处理速度还行,但是当数据量到30万条以上时,处理速度下降,效率不高,有没有什么更高效、更快速的处理方式?希望各位能够推荐更高效、更快速的处理方式, 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    1条回答 默认 最新

    • Marst·Writer 2024-08-13 12:20
      关注

      解决方案: 采用pandas库对指定列进行去重,保留后一次结果
      代码如下

      import pandas as pd
      import numpy as np
      
      data_array = np.array([[1050364, 13, 15, 18, 2, 2195, 3.22, 2800, 0, 0, 1, 1, 7301],
                             [3562, 13, 14, 25, 1, 2829, 20.62, 200, 0, 0, 1, 1, 1081],
                             [1050364, 13, 15, 18, -2, 2195, 3.22, 2800, 0, 0, 0, 1, 7301],
                             [3562, 13, 14, 25, 1, 2829, 20.62, 200, 20.62, 200, 0, 1, 1081],
                             [1050368, 13, 19, 7, 1, 2551, 2.56, 1000, 0, 0, 0, 1, 7301],
                             [3568, 13, 20, 4, 1, 2048, 5.18, 2500, 5.19, 2500, 0, 10, 1081]])
      
      df = pd.DataFrame(data_array)
      # 对列0和12进行去重
      df_new = df.drop_duplicates(subset=[0, 12], keep="last")
      print(df_new)
      

      去重的效果如下

      img

      评论
      zckui 2024-08-14 16:56

      df.drop_duplicates处理的速度更慢,df.drop_duplicates处理的耗时大概是使用npi.group_by的十倍

      import numpy_indexed as npi
      group_index, result_array = npi.group_by(data_array[:, [-1, 0]]).last(data_array)
      

      回复
      Marst·Writer 回复 zckui 2024-08-19 08:42

      好的,我去验证一下.

      回复
      编辑
      预览

      报告相同问题?

    • 相关阅读:
      【微信小程序】vertical属性、文章列表
      C语言中的宏定义和内联函数有什么区别?
      阿里三面:什么是循环依赖?你说一下Spring解决循环依赖的流程
      leetcode做题笔记2586. 统计范围内的元音字符串数
      数据结构题目收录(四)
      VMware认证考试科目及课程内容
      AI全栈大模型工程师(二十)SKvs.LangChain
      携创教育:广东省成人高考录取分数线是多少?通过率高吗?
      若依3.6.0使用Mybatis-plus分页失效以及完美替换Pagehelper
      [尚硅谷React笔记]——第4章 React ajax
    • 原文地址:https://ask.csdn.net/questions/8136085