我需要查看列['b']中的所有行,如果该行不是空的,则转到另一个相应的列['c']并将该特定索引的副本相对于第三列['c']中的所有其他行删除,同时保留该特定索引。我遇到了drop\u duplicates,但是我无法找到一种方法来只查找高亮显示行的重复项,而不是一列中的所有重复项。我不能对整列使用drop\u duplicates,因为我希望在该列中保留重复项,这些重复项可能只对应于列['b']中的空值。在
因此,可能的情况是:如果在['b']中找到一个非空值,则可以转到['c']中的当前索引,找到该索引的所有重复项并将其删除。这些重复项可以对应于['b']中的空值或非空值。如果在['b']中找到空值,则跳到下一个索引。这样就可以间接删除['b']中的空值索引,因为它们是与非空['b']值对应的['c']中的索引的副本。在
用示例数据编辑:
预处理:
df1 = pd.DataFrame([['','CCCH'], ['CHC','CCCH'], ['CCHCC','CNHCC'], ['','CCCH'], ['CNHCC','CNOCH'], ['','NCH'], ['','NCH']], columns=['B', 'C'])
df1
B C
0 CCCH
1 CHC CCCH
2 CCHCC CNHCC
3 CCCH
4 CNHCC CNOCH
5 NCH
6 NCH
后处理和删除正确的副本:
^{pr2}$上面我们看到的结果是,只删除了行0,3,因为它们在第1行的列['C']中是重复的,第1行的“B”值为非零。第5、6行被保留,即使它们在列['C']中是重复的,因为它们没有非零的“B”值。保留第2行和第4行,因为它们在列['C']中不重复。在
所以逻辑是遍历“B”列中的每一行,如果它是空的,那么向下移动一行并继续。如果它不为空,则转到其对应的列“C”,仅在保留该索引的同时删除该列“C”行的任何重复项,然后继续到下一行,直到该逻辑已应用于列“B”中的所有值。在
B列值为空-->查看B列中的下一个值
|如果不是空的|
列B不为空-->列C-->删除C列中该索引的所有重复项,同时保留当前索引-->查看B列中的下一个值
假设您根据
'C'
列对数据帧进行分组,并检查每个组是否存在'B'
-column非空条目:如果没有这样的条目,则返回整个组
否则,对于
'B'
中的非空项返回组,并删除重复项代码:
相关问题 更多 >
编程相关推荐