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日

悬赏问题

  • ¥40 matlab调用ansys联合
  • ¥15 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下!
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)