代码之家  ›  专栏  ›  技术社区  ›  laurimikhael

如果满足条件,则删除重复的行,但更改特定列上的值

  •  0
  • laurimikhael  · 技术社区  · 1 年前

    所以我有一个。包含数千行的csv文件,这些行在A列中具有重复的区域名称,在B列中具有重复的“已完成”值(在同一区域中可以是“已完成”或“正在进行中”)。

    地区 完整的
    芝加哥 正在进行中
    芝加哥 完整的
    芝加哥 正在进行中
    芝加哥 正在进行中
    旧金山 完整的
    旧金山 完整的
    旧金山 完整的
    旧金山 完整的
    洛杉矶 正在进行中
    洛杉矶 正在进行中
    洛杉矶 正在进行中
    洛杉矶 正在进行中

    我需要这样做,最终产品如下

    地区 完整的
    芝加哥 特别完成
    旧金山 完整的
    洛杉矶 正在进行中

    其想法是删除重复的面积值,并使用以下方法由原始值确定B列:

    • 如果某个区域中的所有值都已“完成”,则B列已完成
    • 如果某个区域中的所有值均为“进行中”,则B列为“进行中”
    • 如果一个区域包含值“进行中”和“完成”,则B列特别完整

    到目前为止,我一直在考虑使用python脚本来实现这一点,但想知道是否也可以使用excel来实现这一点?

    1 回复  |  直到 1 年前
        1
  •  1
  •   Harun24hr    1 年前

    我用过的公式 D2 单间牢房

    =UNIQUE(A2:A13)
    

    然后在 E2 单间牢房

    =IF(COUNTA(UNIQUE(FILTER($B$2:$B$13,$A$2:$A$13=D2)))>1,"Particularly Complete",UNIQUE(FILTER($B$2:$B$13,$A$2:$A$13=D2)))
    

    拖到需要的时候。

    enter image description here

        2
  •  0
  •   Evil Blue Monkey    1 年前

    已指示正确答案。不管怎样,如果一个人没有 UNIQUE 或者 FILTER 函数,下面是另一个解决方案:

    A. B C D E
    地区 完整的
    芝加哥 正在进行中 =如果(COUNTIF($2澳元:A2,A2)>1、“、A2) =IFERROR(指数(C:C,聚合(15,6,行(C:C)/(C:C<“”),行(D2)-行(D$2)+1)),“”) =如果(D2=“”,“”,如果(COUNTIF(A:A,D2)=COUNTIFS(A:A,D2,B:B,“已完成”),“已完成”,如果(COUNTIF(A:A,D2)=COUNTIFS(A:A,D2,B:B,“正在进行”),“正在进行”,如果(和(COUNTIFS(A:A,D2,B:B,“已完成”)>0,COUNTIFS(A:A、D2、B:B,“进行中”)>0),“特别完成”,“不可预测的结果”)))
    芝加哥 完整的
    芝加哥 正在进行中
    芝加哥 正在进行中
    旧金山 完整的
    旧金山 完整的
    旧金山 完整的
    旧金山 完整的
    洛杉矶 正在进行中
    洛杉矶 正在进行中
    洛杉矶 正在进行中
    洛杉矶 正在进行中

    必须向下拖动C、D和E列中的公式。列C过滤区域列表,只留下唯一的区域。D列对C列的唯一区域列表进行排序。E列给出实际响应。Once可以很容易地获得一个只需很少工作的独特领域列表(如果列表很长,这可能会更好),因此“真正的交易”只是E列中对所述列表起作用的公式。