sarahpupu 2021-08-18 18:56 采纳率: 0%
浏览 25

【问题】131万条记录有条件去重的高效方法

需求:对131万条数据去重。
去重规则:同一个号码多条记录,保留有“升降档标志”为1的且操作时间最晚的那一条,如果多条记录的“升降档标志”都不为1,则保留操作时间最晚的一条。
我的解决思路是用for循环,代码如下,运行了一下午还没结束,不知道有没有更高效的方法?
求解答

# 1、对原数据按照操作时间倒排序(data_07表示原数据)
data_07_sorted = data_07.sort_values(by=['操作时间'], ascending=False)

# 2、建立一个空Dataframe存储筛选后的数据集,并插入第一条排序后的原数据
columns = data_07_sorted.columns.values.tolist()
data_07_pure = pd.DataFrame(columns=columns)
data_07_pure = data_07_pure.append(data_07_sorted.iloc[0,:])

# 3、按照筛选逻辑进行for循环遍历
data_07_pure = data_07_pure.append(data_07_sorted.iloc[0,:])
for i in range(len(data_07_sorted)):
    if data_07_sorted.iloc[i,0].tolist() in data_07_pure['号码'].tolist():
        tel = data_07_sorted.iloc[i,0].tolist()
        data_07_pure_tel = data_07_pure[data_07_pure['号码'] == tel]
        if data_07_pure_tel['升降档标志'].tolist()[0] in [1,]:
            continue
        elif data_07_sorted.iloc[i,:]['升降档标志'].tolist() in [1,]:
            data_07_pure.drop(index=data_07_pure_tel.index, inplace=True)
            data_07_pure = data_07_pure.append(data_07_sorted.iloc[i,:])
    else:
        data_07_pure = data_07_pure.append(data_07_sorted.iloc[i,:])

原数据长这样:
img

  • 写回答

1条回答 默认 最新

  • I'm float 2021-08-18 22:12
    关注

    用C语言写扩展(用PyObject*),编译为xxx.pyd(Windows)或者xxx.so(Linux)动态链接库,然后在Python中通过import xxx来导入。C语言的速度会快很多。
    或者也可以编译为.dll(Windows)或者.so(Linux)(直接用C内置类型),然后在Python中使用ctypes模块中的CDLL调用,这样也可以用C语言加快运行速度。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月18日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度