You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Julia中DataFrame去重报错:如何保留目标行并移除重复项?

问题解决:DataFrame镜像重复行去重

错误原因

你之前的代码错误在于minmax仅支持两个参数,但你一次性传入了[:p1, :p2, :s1, s2]四个列,导致ByRow(minmax)尝试将四个值传给minmax,触发参数不匹配的方法错误。

解决方案

针对你的需求(去除(p1,p2)互换且对应(s1,t1)/(s2,t2)镜像重复的行),需要分组处理成对的列,分别生成有序标识后再去重:

方法1:直接在unique中定义多组转换规则

unique(df, [
    # 将p1、p2转换为有序元组,统一镜像对的标识
    [:p1, :p2] => ByRow(minmax),
    # 将(s1,t1)、(s2,t2)两个元组转换为有序对,统一镜像行的时间标识
    [:s1, :t1, :s2, :t2] => ByRow((s1,t1,s2,t2) -> minmax((s1,t1), (s2,t2)))
])

方法2:先添加辅助列再去重(更直观)

using DataFrames, Pipe

df_clean = @pipe df |>
    # 添加辅助列:生成p1/p2的有序对、(s1,t1)/(s2,t2)的有序元组对
    transform(
        [:p1, :p2] => ByRow(minmax) => :p_pair,
        [:s1, :t1, :s2, :t2] => ByRow((s1,t1,s2,t2) -> minmax((s1,t1), (s2,t2))) => :st_pair
    ) |>
    # 基于辅助列去重
    unique([:p_pair, :st_pair]) |>
    # 移除辅助列,保留原结构
    select(Not([:p_pair, :st_pair]))

效果说明

两种方法都会保留第1行,且在第2、3行中保留其中一行,实现镜像重复行的去重。

内容的提问来源于stack exchange,提问作者Chao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 22:36:32