此问题基于已解决的较早问题,但稍有不同,较早问题的线程是
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], )