gpt4 book ai didi

python pandas如何有选择地删除重复项

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:29 24 4
gpt4 key购买 nike

我需要查看列 ['b'] 中的所有行,如果该行非空,则转到另一个相应的列 ['c'] 并删除该特定索引相对于该列中所有其他行的重复项第三列 ['c'] 同时保留此特定索引。我遇到了 drop_duplicates,但是我无法找到一种方法来仅查找突出显示的行的重复项,而不是列中的所有重复项。我无法在整个列上使用 drop_duplicates,因为我想保留此列中的重复项,这些重复项可能仅对应于列 ['b'] 中的空值。

因此可能的情况是:如果在 ['b'] 中找到一个非空值,您可以转到 ['c'] 中的当前索引并找到该 ONE 索引的所有重复项并删除它们。这些重复项可能对应于 ['b'] 中的空值或非空值。如果在 ['b'] 中发现空值,则跳到下一个索引。这样,['b'] 中的空值索引可能会被间接删除,因为它们是 ['c'] 中与非空 ['b'] 值相对应的索引的重复项。

使用示例数据进行编辑:

预处理:

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

后处理并删除正确的重复项:

df2 = pd.DataFrame([['CHC','CCCH'], ['CCHCC','CNHCC'], ['CNHCC','CNOCH'], ['','NCH'], ['','NCH']], columns=['B', 'C'])

df2

B C
1 CHC CCCH
2 CCHCC CNHCC
4 CNHCC CNOCH
5 NCH
6 NCH

在上面我们看到的结果是,唯一删除的行是第 0,3 行,因为它们在第 1 行的列 ['C'] 中重复,该列具有非零 'B' 值。即使第 5,6 行在列 ['C'] 中彼此重复,也会保留,因为它们没有非零“B”值。第 2 行和第 4 行被保留,因为它们在列 ['C'] 中不重复。

因此,逻辑是遍历“B”列中的每一行(如果它为空),然后向下移动一行并继续。如果它不为空,则转到其相应的列“C”并仅删除该列“C”行的任何重复项,同时保留该索引,然后继续下一行,直到此逻辑已应用于列“B”中的所有值'.

B 列值为空 --> 查看 B 列中的下一个值

|或者如果不为空 |

B 列不为空 --> C 列 --> 删除 C 列索引的所有重复项,同时保留当前索引 --> 查看 B 列中的下一个值

最佳答案

假设您根据 'C' 列对 DataFrame 进行分组,并检查每个组是否存在 'B' 列非空条目:

  • 如果没有这样的条目,则返回整个组

  • 否则,返回 'B' 中非空条目的组,并删除重复项

在代码中:

def remove_duplicates(g):                                    
return g if sum(g.B == '') == len(g) else g[g.B != ''].drop_duplicates(subset='B')

>>> df1.groupby(df1.C).apply(remove_duplicates)['B'].reset_index()[['B', 'C']]
B C
0 CHC CCCH
1 CCHCC CNHCC
2 CNHCC CNOCH
3 NCH
4 NCH

关于python pandas如何有选择地删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39644167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com