zckui 2024-08-09 14:58 采纳率: 75%
浏览 23

关于#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万条以上时,处理速度下降,效率不高,有没有什么更高效、更快速的处理方式?
希望各位能够推荐更高效、更快速的处理方式,

  • 写回答

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

    评论

报告相同问题?

问题事件

  • 创建了问题 8月9日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见