- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要查看列 ['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/
我是一名优秀的程序员,十分优秀!