如何根据条件删除行子集的重复项(熊猫)

时间:2021-06-07 02:39:35

标签: python python-3.x dataframe duplicates concatenation

此问题基于已解决的较早问题,但稍有不同,较早问题的线程是

Conditional concatenation in dataframe

我有四组代码(代码 1、代码 2、代码 3 和代码 4),前三列包含字母数字对象,最后一列(代码 4)包含字符串数据。数据帧的每个单元格中的所有内容都由分隔符(;)分隔,并且代码基于序列相关,例如代码1的A123与代码2的A相关,与代码3的A445相关,与YES相关代码 4。代码 3 有一些重复或重复的代码。

现在我想看到代码 1 和代码 2 的期望输出基于代码 3 和代码 4 连接起来,其中代码 1 和代码 2 是基于这两个条件之一连接起来的

a) 如果代码 3 中对应的代码没有重复值

b) 如果code 3中对应的code有重复值,那么有两种情况

b1) 如果代码 3 的重复值之一在代码 4 中具有对应的值 YES,则 YES 的索引位置用于连接代码 1 和代码 2(如 A123 A,因为 A445 在代码 3 中重复三次,而A445的第一个位置在代码4中对应的是YES)

b2) 如果代码 3 中的重复值在代码 4 中没有与之对应的 YES 值,则需要使用最后一个重复值的位置来连接代码 1 和代码 2(如第二个中的 C577 H2行,其中 A621 的重复值没有对应的 YES,因此 A621 的最后位置索引用于连接代码 1 和 2)

在前面的问题中(见线程),

这个命令有帮助

drop_duplicates(subset='code3', keep='last')

但是现在我卡住了,因为需要根据某些条件删除重复项(例如基于代码 4 中的 YES 值),我试图弄清楚是否可以在删除重复项命令中添加条件,但是我没有找到任何合适的命令。让我知道是否可以完成任何解决方法。提前致谢!

数据框的代码是

df = pd.DataFrame({"code1": ["A123; A321; B478; B678; C567", "A321; A821; B448; B698; C577"], "code2": ["A; B5; N5; R4; H5", "A3; B; N; R7; H2"],"code3": ["A445; A323; A323; A445; A659", "A328; A328; A621; A442; A621"],"code 4":["YES; NO; NO; NO; NO","YES; NO; NO; YES; NO"]},      index=[0, 1], )

我想要的包含输入代码的输出表是 enter image description here

0 个答案:

没有答案